Windows環境でGnuwin32バイナリを使用しています。
特定の種類のファイル、たとえばPDFを検索する場合、通常は次のコマンドを実行します。
find . -iname '*.pdf' -print
これは、どのUNIXシステムでも完全に機能します。
find.exe . -iname "*.pdf" -print
ただし、Windowsでは、一重引用符を二重引用符に置き換えたため、現在のディレクトリにpdfファイルがない場合にのみ機能します。それ以外の場合は、*
が展開されます。
さらに悪いことに、現在のディレクトリにPDFファイルが1つしかない場合は、それが展開され、構文エラーが発生せず、間違った結果が得られます。
*
カレット、バックスラッシュ、スター自体を使用してエスケープし、二重引用符で囲んでみました。何も機能しません。
実際の例:
さて、ここに私のすべてのファイルがあります:
C:\tmp>find . -type f
./a/1.pdf
./a/2.pdf
./a/aa/1.pdf
./b/1.pdf
./b/bb/1.pdf
./b/bb/2.pdf
良好な動作、ワイルドカードは拡張されませんでした
C:\tmp>find . -iname "*.pdf"
./a/1.pdf
./a/2.pdf
./a/aa/1.pdf
./b/1.pdf
./b/bb/1.pdf
./b/bb/2.pdf
C:\tmp>cd a
注意、一貫性のない動作、ワイルドカードが拡張されました:
C:\tmp\a>find . -iname "*.pdf"
find: paths must precede expression
Usage: find [-H] [-L] [-P] [path...] [expression]
C:tmp\a>cd ..\b
注意、一貫性のない動作、ワイルドカードが拡張されました:
C:\tmp\b>find . -iname "*.pdf"
./1.pdf
./bb/1.pdf
ありがとうございました