为什么向此 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

所有这些都被称为sysrunproc或...

-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

相关内容