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/curl
grep
-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
)はこれと一致します。