次のすべてのアクセス拒否メッセージを非表示にする必要があります:
find . > files_and_folders
このようなメッセージが表示される場合の実験を行っています。このメッセージが表示されていないすべてのフォルダーとファイルを収集する必要があります。
ファイルに権限レベルを指定することは可能ですかfiles_and_folders
?
同時にエラーを非表示にするにはどうすればよいでしょうか?
ベストアンサー1
使用:
find . 2>/dev/null > files_and_folders
もちろん、これによりPermission denied
エラーだけでなく、すべてのエラー メッセージが非表示になります。
シンボリックリンクのホップが多すぎるなどの他の可能性のあるエラーを保持し、アクセス許可が拒否されたエラーを保持したくない場合は、おそらく「アクセス許可が拒否されました」というファイルがあまりないだろうと推測して、次を試す必要があります。
find . 2>&1 | grep -v 'Permission denied' > files_and_folders
厳密に標準誤差だけをフィルタリングしたい場合は、より複雑な構造を使用できます。
find . 2>&1 > files_and_folders | grep -v 'Permission denied' >&2
コマンドの I/O リダイレクトfind
は です2>&1 > files_and_folders |
。パイプは標準出力をgrep
コマンドにリダイレクトし、最初に適用されます。 は2>&1
標準エラーを標準出力と同じ場所 (パイプ) に送信します。 は> files_and_folders
標準出力 (標準エラーではない) をファイルに送信します。最終結果として、標準エラーに書き込まれたメッセージはパイプに送信され、 の通常出力はfind
ファイルに書き込まれます。grep
は標準出力をフィルターし (フィルターの選択範囲を決定できます。ロケールと O/S に応じてスペルを変更する必要がある場合があります)、最後の は、>&2
生き残ったエラー メッセージ (標準出力に書き込まれた) がもう一度標準エラーに送られることを意味します。最後のリダイレクトは端末ではオプションと見なすことができますが、エラー メッセージが標準エラーに表示されるようにスクリプトで使用すると非常に便利です。
このテーマには、やりたいことに応じて無限のバリエーションがあります。これは、Bourneシェル派生版(Bash、Kornなど)やPOSIX準拠バージョンのUnixのどのバージョンでも動作します。find
。
システムにインストールされているの特定のバージョンに適応させたい場合はfind
、代替オプションが利用できる場合があります。find
特に GNU には、他のバージョンでは利用できない無数のオプションがあります。そのようなオプション セットの 1 つについては、現在受け入れられている回答を参照してください。