lsコマンドを「サイレント」にする方法は?

lsコマンドを「サイレント」にする方法は?

私が再帰すると仮定しましょう。ls

$ ls -R 

ルートディレクトリにあります。

このような文字をたくさん受けます -

ls: cannot open directory ./var/lib/sendmail: Permission denied
ls: cannot open directory ./var/lib/sudo: Permission denied
...

cannot open directory上記のメッセージが表示されないようにする方法はありますか?

答え1

これはエラーメッセージなので、stdoutではなくstderrに送信されます。解決策はstderrをリダイレクトすることです。

ls -R 2>/dev/null

説明する:

すべてのコマンドには3つの標準ファイル記述子があります:標準入力(0)(通常コマンドが入力される端末)、標準出力(1)(通常コマンドが出力を印刷する端末)、標準エラー(2)(byデフォルトは標準出力と同じです)。

すべてではありませんが、ほとんどのプログラム/ツールは標準エラーファイル記述子に警告とエラーを出力します。これで、ファイルディスクリプタが修復された場合、それほど役に立ちません。これがシェルが次を提供する理由です。リダイレクト:標準ファイル記述子を目的のファイルにリダイレクトできます。

標準入力リダイレクト(キーボードではなくファイルから入力を受け取る):

interactive_program 0< file_with_answers

ご覧のとおり、標準入力にいわゆる「応答ファイル」を提供することで、多くの質問をする簡単なプログラムを自動化するのに役立ちます。

これは次のように短縮できます。

 interactive_program < file_with_answers

<リダイレクトを明確にするので(~から文書到着プログラム)

1>...同様に、stdoutは、または(既存のファイルをトリミングせずに追加)を介して>...リダイレクトできます。>>...

標準エラーリダイレクトを使用するには、次のようにファイル記述子を明示的に指定する必要があります。2>...したがって、上記の作業はすべてのエラーを特別なファイルに送信することです。/dev/nullこれは少しブラックホールに似ています。

関連読書以下の説明では、MattDMoが提供するリダイレクトについて説明します。

関連情報