この find コマンドに -prune を追加すると、外部ファイルが印刷されるのはなぜですか?

この find コマンドに -prune を追加すると、外部ファイルが印刷されるのはなぜですか?

ファイルシステム全体で名前付きファイルを検索するには、bash次のコマンドを実行できます。

% find / -name "bash" 2> /dev/null

私のシステムで作成されました

/bin/bash
/etc/apparmor.d/abstractions/bash
/usr/share/doc/bash
/usr/share/lintian/overrides/bash
/usr/share/menu/bash
/rofs/bin/bash
/rofs/etc/apparmor.d/abstractions/bash
/rofs/usr/share/doc/bash
/rofs/usr/share/lintian/overrides/bash
/rofs/usr/share/menu/bash

大丈夫です。ただし、システムにはこのファイルが必要な特定のディレクトリがあることがわかります。いいえ、検索をより効率的にするために、コマンドを次のように更新しました。

% find / \ 
-name "proc" -prune -o \
-name "sys" -prune -o \
-name "run" -prune -o \
-name "bash" \
2> /dev/null

これで、無関係なファイルでいっぱいの画面が表示されます。なぜこれを行うのですかfind

バージョンを探す

% find --version
find (GNU findutils) 4.7.0-git

答え1

最終操作を指定していないので、find完了したように処理してください。

find / \( -name .. -prune -o -name .... -o -name bash \) -print

"-prune" は true を返すので、これらのディレクトリを印刷します。これは、と呼ばれるすべてのディレクトリsys、と呼ばれるすべてのディレクトリprocなどを意味します。カーネルのソースコードがあれば、明らかに多くのディレクトリがあるでしょう!

例えば

/sys
/var/run
/proc
/usr/src/linux-headers-3.16.0-4-amd64/include/config/sys
/usr/src/linux-headers-3.16.0-4-amd64/include/config/keys/debug/proc
/usr/src/linux-headers-3.16.0-4-amd64/include/config/nf/conntrack/proc
/usr/src/linux-headers-3.16.0-4-amd64/include/config/proc

sysこれらはすべてorrunまたはorと呼ばれますproc

-print簡単な答えは

% find / -name "proc" -prune -o \
-name "sys" -prune -o \
-name "run" -prune -o \
-name "bash" -print \
2> /dev/null

これでアイテムだけがfind印刷されます。bash

例えば

/usr/share/doc/bash
/usr/share/lintian/overrides/bash
/usr/share/menu/bash
/bin/bash

関連情報