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

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

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

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

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

答案1

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

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

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

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

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

find / /home -xdev -exec grep ...

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

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

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

find / /home -xdev -type f -exec grep ...

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

find /home/me/dirWithSomeLinksToFiles -xdev \( -type f -or -type d \) -exec grep ...

答案2

不用担心目录,为什么不告诉 find 只将实际文件提供给 grep 呢?

find / -type f -exec grep .... {} +

似乎对我来说工作得很好(grepping kmem 不会杀死盒子;D)。

相关内容