bashに似たコマンドを実行すると、sudo find . "*dev/null"
シェルは式に一致するディレクトリに一致するエントリを検索するすべてのディレクトリを印刷します。
ただし、テスト条件(たとえば)を追加するフラグを発行すると、sudo find . -wholename "*dev/null"
シェルは検索した式に一致するディレクトリ(およびアクセスできないディレクトリ)のみを印刷します。
マニュアルページを見ましたが、find
コマンドにテストを追加すると、なぜ発生するのかを説明するものが見つかりませんでした。いいえ検索された各ディレクトリを印刷します。このfind
コマンドがテストインスタンスで印刷されない理由を説明できる人はいますか?
答え1
そしてsudo find . "*dev/null"
両方から.
*dev/null
出発点。すべてが一致するという明示的なテストはありません。走るときとほぼ同じです。
sudo find .
sudo find "*dev/null"
後者が印刷する可能性が最も高いですが、find: '*dev/null': No such file or directory
前者は以下を探します。すべて存在する.
。
sudo find . -wholename "*dev/null"
スニペットには-wholename "*dev/null"
実際のテストがあります。
~からPOSIX仕様、次のスニペットが関連しています。
ユーティリティ
find
は、pathで指定された各ファイルからディレクトリ階層を繰り返しダウンさせ、各ファイルのOPERANDSセクションで説明されている基本色で構成されるブール式を評価する必要があります。
式がない場合は、
デフォルトは常にtrueと評価する必要があり、現在のパス名が標準出力に書き込まれます。
あなたのsudo find . "*dev/null"
事実ですsudo find . "*dev/null" -print
。どのテストも以前に式の評価を停止-print
できないため、到達したfind
テストのすべてのパス名に対してすべてのパス名が印刷されます。-print
その他のクリップ:
( expression )
本当なら本当ですexpression
。
expression [-a] expression
基本演算子の組合せ、AND演算子は、2つの基本演算子の並置によって暗示されるか、オプションの演算子-a
によって指定されます。最初の式がfalseの場合、2番目の式を評価しないでください。
式がない場合は、
-exec
が含まれていない場合、与えられた式は次に効果的に置き換えられます。-ok
( given_expression ) -print
-exec
注: 実装は、、-ok
コレクションに追加できます-print
。
あなたのsudo find . -wholename "*dev/null"
同等
sudo find . \( -wholename "*dev/null" \) -a -print
(角かっこはシェルに特別なのでエスケープされます。)
これで-wholename "*dev/null"
falseと評価された場合、それはうまくいくので-print
評価されません。-a
これにより、指定されたパス名のテストが失敗した場合、パスfind
名は印刷されません。
メモ:
- POSIX 以外の拡張は、ツールの全体的なアイデアを変更しないでください。
-wholename
POSIXでは必要ありません。それでもGNUでは、POSIXで指定したfind
ものと同じです。-path
- あなたは見つけることができます私の他の答え興味深い。