検索パターンが参照されていない場合でも、リストの.logファイルを繰り返し検索するのはなぜですか?

検索パターンが参照されていない場合でも、リストの.logファイルを繰り返し検索するのはなぜですか?

私が使用しているfindコマンドは、一致するパターンが参照されていない場合でも、すべての.logファイルを繰り返し一覧表示します。私が知る限り、検索パターンが引用されていない場合は、シェルによって拡張され、findコマンドが機能し、現在のディレクトリの.logファイルのみを提供する必要があります。

探す。 -iname *.log

ベストアンサー1

他のほとんどのPOSIXシェルは、globがファイルと一致しないときにエラーを報告せずに代わりにglobの縮小(拡張されていない)をアプリケーションに渡すので、おそらくこれらのシェルの1つを使用しています。隠しファイルbashはありません。.log現在のディレクトリに拡張子を含む)。

その樹皮の中であなたは見つけることができます

echo *.log

出力

*.log

次のエラーの代わりに:

zsh: no matches found: *.log`

fish: No matches for wildcard '*.log'. See `help expand`.
echo *.log

echo: No match.

.logしたがって、現在のディレクトリにファイルがない場合:

find . -name *.log

同じだろう

find . -name '*.log'

リテラル*.log引数の1つがに渡されますfind

この問題を解決したシェルはzsh、 、csh最新tcshバージョンであるfish(事実 Unix 以前のバージョンでは大丈夫だったが 1970 年代後半 Bourne シェルで壊れたが一部シェルで改修された)。 Passをbash使用すると、shopt -s failglobより良い行動を得ることができます。

.log現在のディレクトリ(たとえば)にファイルがある場合は、次のようにfile.logなります。

find . -name file.log

複数の場合(たとえば、file1.logおよびfile2.log)は次のとおりです。

find . -name file1.log file2.log

これは誤った呼び出しになりますfind

おすすめ記事