使用“find /”,跳过“/proc”、“/sys”等类似目录

Mou*_*Dog 6 filesystems find directory-structure proc

有一些目录可能会导致 find 出现问题,尤其是find /. 操作系统在这些目录中创建并非真正文件的文件。这些目录中有/proc /sys /run.

问题是,如果你正在做类似的事情find / -exec grep,如果你爬取这些系统中的一些,你可能会把系统搞得一团糟。

那么我如何告诉 find 跳过这些目录而不列出它们。因为有人可能会决定像这样创建一个新目录。与其依赖列表,我宁愿对目录进行测试,并选择排除未通过此测试的目录。

Vol*_*gel 4

好的,您不想依赖排除文件的列表,因此您不必冒险排除太少的目录。

因此,让我们依靠说明要包含哪些文件。

这些“不是真正的文件”几乎都位于单独的文件系统上。
这更像是“不是真正的文件系统”,只是看起来很相似。

我们可以说的是,它们不在我们的“真实”文件系统上。
假设我们有两个分区,安装在/和 `/home' 中:

有了选项-xdev,我们就可以find在这些已知的好地方运行,而不是别的:

find / /home -xdev -exec grep ...
Run Code Online (Sandbox Code Playgroud)

一些奇怪的文件仍然可能混入我们的正常文件中(参见上面的“几乎全部”)。

它们确实会引起问题:如果有一个被遗忘的fifo文件,并且您对它运行 grep ,那么您的 grep 会尝试读取它,然后永远等待。

我们可以排除所有危险类型,但看看 的可能文件类型-type,我们真正需要的文件类型并不多:fdl符号链接。
我们只需要注意包含部分或全部键入的f, dand l,或排除b, c, p, sand D

find / /home -xdev -type f -exec grep ...
Run Code Online (Sandbox Code Playgroud)

或者如果我们想包含符号链接:

find /home/me/dirWithSomeLinksToFiles -xdev \( -type f -or -type d \) -exec grep ...
Run Code Online (Sandbox Code Playgroud)