アスタリスク(*)が先頭にある場合、findが一致するファイルを一覧表示しないのはなぜですか? [コピー]

アスタリスク(*)が先頭にある場合、findが一致するファイルを一覧表示しないのはなぜですか? [コピー]

Onでは現在のディレクトリにUbuntu 14.04, 64 bit設定しました。部分文字列があるかどうかをすべての/lib/modules/4.2.0-27-generic/kernel/driversファイルを検索する予定です。net正規表現を使用して検索すると、ディレクトリのみが*net*検索./net結果として返されます。ただし、正確なファイル名を指定すると、関連ファイルのみが一覧表示されます(クロスチェックする正確なファイル名が常にわからないため、役に立ちません)。

$ find . -name *net* 
./net
$ find . -name *usbnet* 
./net/usb/usbnet.ko
$ pwd
/lib/modules/4.2.0-27-generic/kernel/drivers

私は何を間違えましたか?

ベストアンサー1

*net*引用やエスケープなしで単に使用すると、シェルはコマンドが実行されるnet前に現在のディレクトリの(既存の)ファイル/ディレクトリにコマンドを拡張するためですfind。したがって、コマンドは次のようになります。

find . -name net

ご覧のとおり、マッチするnetだけなのでusbnet.koマッチしません。

また、引用符やエスケープなしでパターンが一致しない場合(およびnullglob無効にfailglobなっている場合)、次のように処理されます。現状のまま。たとえば、find . -name *net*現在のディレクトリにファイル名がない場合、netfindパターンはを返します*net*


したがって、問題を解決するにはシェルワイルドカードを避ける必要があります。これには、引用またはエスケープされたワイルドカードパターンを使用できます。

find . -name '*net*' 
find . -name "*net*" 
find . -name \*net\* 

おすすめ記事