奇妙なことに、findで-nameの次のパターンが予期せず、すべての対応するファイル名を正常に検索することがあります。これは、シェルの解析によってのみ現在のディレクトリにそのファイル名を見つけることができることです(引用符なしの検索ツールは見つかりません)。
find /tmp -type f -name *.txt
/tmp/amp_iostat.txt
/tmp/awrrpt_1_7950_7973.txt
/tmp/oplanlog/osys/2014-07-01-12-26-28/log.txt
/tmp/oplanlog/osys/2014-07-01-13-15-33/log.txt
/tmp/oplanlog/osys/2014-07-01-13-17-58/log.txt
/tmp/oplanlog/osys/2014-07-01-13-30-27/log.txt
/tmp/oplanlog/osys/2016-10-27-19-38-50/log.txt
/tmp/pms2_20170427.txt
/tmp/pmsdb1_20170622.txt
/tmp/pmssh1_20160728.txt
/tmp/pmssh1_20160831.txt
/tmp/pmssh1_20161227.txt
/tmp/pmssh1_20170328.txt
/tmp/pmssh1_20170523.txt
/tmp/pmssh1_20170727.txt
/tmp/pmssh1_20170822.txt
/tmp/pmssh2_20170328.txt
/tmp/pmssh_20170119.txt
/tmp/pmssh_20170220.txt
/tmp/sgpms_20140717_1736_summary.txt
/tmp/sgpms_20140717_1736_trace.txt
/tmp/sgpms_20140717_1737_summary.txt
/tmp/sgpms_20140717_1737_trace.txt
/tmp/sgpms_20140717_1739_summary.txt
/tmp/sgpms_20140717_1739_trace.txt
/tmp/sgpms_20140717_1743_summary.txt
/tmp/sgpms_20140717_1743_trace.txt
/tmp/sgpms_20140717_1749_summary.txt
/tmp/sgpms_20140717_1749_trace.txt
/tmp/sgpms_20140717_1751_summary.txt
/tmp/sgpms_20140717_1751_trace.txt
find /tmp -type f -name *.txt|wc -l
31
答え1
引用がない場合は*.txt
これを遵守する。パス名拡張(ファイル名拡張とも呼ばれる)。こんなことが起こった現在の作業ディレクトリ(CWD). CWDに "txt"拡張子を持つファイルが含まれている場合、find
シェルを呼び出す前に引数*.txt
を一致するファイル名に置き換えると、コマンドは次のようになります。
find /tmp -type f -name file1.txt file2.txt file3.txt ...
拡張機能が返されるかどうかによって、少なくとも3つの結果が得られます。
- ...複数のファイル:エラーが発生しました
- ...実行中のパスのファイル名と一致するファイルとその名前
find
:テストは対応-name
するファイルのみを一致します。 - ...検索パス内のどのファイルとも一致しないファイル:
-name
何も一致しません
一方、CWDが行う場合いいえtxtファイルを含めて*.txt
渡すfind
と、参照するのとまったく同じように動作します。
道徳的:パス名拡張が実際に発生したくない限り、globを含むパターンを使用するときは常に引用符を使用してください(このオプションに対して意図的にfind
これを行うことはほとんどありません)。-name