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*
現在のディレクトリにファイル名がない場合、net
findパターンはを返します*net*
。
したがって、問題を解決するにはシェルワイルドカードを避ける必要があります。これには、引用またはエスケープされたワイルドカードパターンを使用できます。
find . -name '*net*'
find . -name "*net*"
find . -name \*net\*