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
私はどのような間違いを犯していますか?
*net*
だけを(引用符やエスケープなしで)使用すると、net
コマンドが実行される前に、現在のディレクトリ内の(既存の)find
ファイル/ディレクトリとしてシェルによって展開されるためです。したがって、コマンドは次のようになります。
find . -name net
ご覧のとおり、net
と一致しているだけなので、usbnet.ko
は一致しません。
また、引用符とエスケープを使用せずに、パターンが一致しない場合(および、nullglob
オプションとfailglob
オプションが無効になっている場合)、そのままとして扱われることにも注意してください。したがって、たとえば、find . -name *net*
の場合、現在のディレクトリにnet
を含むファイル名がない場合、パターン検索で取得されるのは*net*
です。
したがって、問題を解決するには、シェルのグロブを回避する必要があります。そうするには、グロブパターンを引用またはエスケープすることができます。
find . -name '*net*'
find . -name "*net*"
find . -name \*net\*