Como são mensagens de erro, elas são enviadas para stderr não stdout. A solução é que você redireciona o stderr:
ls -R 2>/dev/null
Explicação:
Qualquer comando tem 3 descritores de arquivo padrão: entrada padrão (0) (geralmente o terminal onde você digita comandos), saída padrão (1) (normalmente o terminal onde o comando imprime sua saída) erro padrão (2) padrão é o mesmo que a saída padrão).
A maioria (se não todos) programas / ferramentas imprime avisos e erros para o descritor de arquivo de erro padrão. Agora os descritores de arquivos não seriam muito úteis se fossem corrigidos; é por isso que o shell oferece redirecionamento : você pode redirecionar qualquer um dos descritores de arquivo padrão para qualquer arquivo que desejar.
Redirecionando stdin (para receber entrada de um arquivo em vez de do seu teclado):
interactive_program 0< file_with_answers
Como você pode ver, isso pode ajudá-lo a automatizar a execução de programas simples que fazem muitas perguntas, fornecendo um chamado "arquivo de resposta" exibido na entrada padrão.
Isso pode ser encurtado para
interactive_program < file_with_answers
como o <
torna o redirecionamento claro ( do arquivo para o programa)
Da mesma forma, a saída padrão pode ser redirecionada por meio de 1>...
ou >...
ou >>...
(anexar a um arquivo existente em vez de truncá-lo)
O redirecionamento de erro padrão requer que você especifique explicitamente o descritor de arquivo da seguinte forma: 2>...
, então o que o acima faz é direcionar todos os erros para o arquivo especial /dev/null
que é uma espécie de buraco negro para bits. p>
Leitura relevante sobre o redirecionamento fornecido por MattDMo nos comentários abaixo.