-name の後のパターンが引用されない場合、 find は奇妙に動作します。

-name の後のパターンが引用されない場合、 find は奇妙に動作します。

奇妙なことに、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

おすすめ記事