Da es sich um Fehlermeldungen handelt, werden sie an stderr und nicht an stdout gesendet. Die Lösung ist, dass Sie stderr umleiten:
ls -R 2>/dev/null
Erläuterung:
Jeder Befehl verfügt über 3 Standard-Dateideskriptoren: Standardeingabe (0) (normalerweise das Terminal, an dem Sie Befehle eingeben), Standardausgabe (1) (normalerweise das Terminal, an dem der Befehl seine Ausgabe druckt) Standardfehler (2) (standardmäßig ist dies der wie Standardausgabe).
Die meisten (wenn nicht alle) Programme / Tools drucken Warnungen und Fehler in den Standard-Fehlerdateideskriptor. Jetzt wären die Dateideskriptoren nicht sehr nützlich, wenn sie repariert würden. Aus diesem Grund bietet die Shell eine Umleitung : Sie können jeden der Standard-Dateideskriptoren in eine beliebige Datei umleiten.
Stdin umleiten (um Eingaben von einer Datei anstatt von Ihrer Tastatur zu übernehmen):
interactive_program 0< file_with_answers
Wie Sie sehen, kann dies Ihnen helfen, die Ausführung einfacher Programme zu automatisieren, die viele Fragen stellen, indem Sie eine sogenannte "Antwortdatei" bereitstellen, die für die Standardeingabe bereitgestellt wird.
Dies kann auf verkürzt werden
interactive_program < file_with_answers
wie das <
die Umleitung klar macht ( von der Datei zum Programm)
Ebenso kann stdout über 1>...
oder >...
oder umgeleitet werden >>...
(an eine vorhandene Datei anhängen, anstatt sie abzuschneiden)
Die Standard-Fehlerumleitung erfordert, dass Sie den Dateideskriptor explizit wie 2>...
folgt angeben: Das oben Gesagte leitet alle Fehler an die spezielle Datei weiter, /dev/null
die eine Art Schwarzes Loch für Bits darstellt.
Relevante Lektüre zur Weiterleitung, wie von MattDMo in den Kommentaren unten angegeben.