findはすべてのファイルを一覧表示できません。

findはすべてのファイルを一覧表示できません。

usrパスにキーワード "x86_64-linux-gnu"を含むすべてのファイルを一覧表示しようとしています。たとえば、/usr/bin/x86_64-linux-gnu-gcc-ranlib-5

まず、次のコマンドを実行します。

find /usr -name "*x86_64-linux-gnu*" | wc -l

出力は232です。正しくないということを感じることができました。

その後、別のコマンドを実行します。

find /usr -name "*" | grep x86_64-linux-gnu | wc -l

出力は3700で、これは正しいです。

最初のコマンドが期待どおりに機能しないのはなぜですか?

答え1

下のすべてのファイルを探している場合含まれているので、代わりにx86-64-linux-gnu使用する必要があります。-path-name

find /usr -path "*x86_64-linux-gnu*" | wc -l

-name-pathフルパスではなく、デフォルトのファイル名のみが一致します(findコマンドラインで指定された初期パスの1つから始まるように構成されています)。最初のコマンドの出力を見てみましょう。

find /usr -name "*x86_64-linux-gnu*" | less

、、x86_64-linux-gnuなど、独自に一致するファイルとディレクトリが表示されますが、対応するバリアントまたは上記のバリエーションと一致するファイルとディレクトリは表示されません。/usr/include/x86_64-linux-gnu/usr/lib/ccache/x86_64-linux-gnu-g++/usr/lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so/usr/include/x86_64-linux-gnu/curlgrep-path

これら2つの表現と適切な使用法は次のとおりです。find(1)マンページ(いつものように、man findまず自分のシステムを確認してください。)

答え2

からman find

   -name pattern
          Base of file name (the path with the leading directories removed) matches
          shell pattern pattern.

最初の形式(-name "*x86_64-linux-gnu*")はそのファイルの形式でのみ機能します。名前マッチpattern。名前がパターンと一致するディレクトリにある場合、一致しません。ただし、後者の形式(-name "*"with grep)はこれと一致します。

関連情報