警告をスキップ

警告をスキップ

私はこれが「権限」を含む警告をスキップすると思いました。

$ find / -iname "*mysql*" | grep -v "Permission"
find: /.DocumentRevisions-V100: Permission denied
find: /.fseventsd: Permission denied
find: /.Spotlight-V100: Permission denied
find: /.Trashes: Permission denied

しかしそれは真実ではない。どんな提案がありますか?

これに比べて期待通りに動作します。

$mkdir foo
$ls | grep -v "foo"

ベストアンサー1

警告はfindエラーストリーム、STDERR、ファイル記述子2に表示されますが、パイプを使用するとSTDOUT(ファイル記述子1)のみがリダイレクトされ使用されるため、メッセージは引き続き表示されgrepます。

解決策:

警告に興味がないので、STDERRを次にリダイレクトしてください/dev/null

find / -iname "*mysql*" 2>/dev/null

必ず使用する必要がある場合は、grepSTDOUTとSTDERRを渡してから次のコマンドを使用してくださいgrep -v "Permission"

シェルが以下をサポートしている場合|&:

find / -iname "*mysql*" |& grep -v "Permission"

POSIXスタイル:

find / -iname "*mysql*" 2>&1 | grep -v "Permission"

参考までに警告のソースを確認してください。非rootユーザーとして実行できるため、権限の問題がある可能性があります。この問題を解決するには、次のアカウントでコマンドを実行するか、findそれrootに応じて検索を制限してください。

おすすめ記事