如何使用 find 排除 NFS 目录?

如何使用 find 排除 NFS 目录?

我需要搜索没有用户或组的文件。

find / -nouser -o -nogroup

我认为这还可以。但是,我不想搜索 NFS 共享。如何在 find 命令中排除 NFS 共享?

答案1

您可能会得到的最接近的是使用-xdev,这意味着“不要下降其他文件系统上的目录”。然后你需要指定你使用的文件系统想要搜索。

答案2

通过 GNU find,您可以使用-fstype谓词:

find / -fstype nfs -prune -o \( -nouser -o -nogroup \) -print

话虽如此,hymie 的方法可能更有意义:将您想要搜索的 FS 列入白名单,而不是将您不想搜索的 FS 列入黑名单。

如果你只想包含jfs2文件系统(假设/是 on jfs2),那么,你需要编写它:

find / ! -fstype jfs2 -prune -o \( -nouser -o -nogroup \) -print

不要这样写:

find / -fstype jfs2 \( -nouser -o -nogroup \) -print

虽然这会阻止find打印非 jfs2 文件系统中的文件,但这不会阻止它爬行那些非 jfs2 文件系统(您需要它-prune)。

注意-a如果省略则隐含) 优先于-o(或者),所以你需要注意是否需要括号。

以上正确的命令缩写为:

find / \( \( ! -fstype jfs2 \) -a -prune \) -o \
  \( \( -nouser -o -nogroup \) -a -print \)

答案3

最容易使用-不是

 find / -not -fstype nfs -nouser -o -nogroup

归因

答案4

我尝试了特定的查找选项并遇到了问题,因此切换到此方法:

find $(mount | awk '!/:/ {printf "%s ", $3}') -xdev

这应该搜索所有未挂载 NFS 的文件系统。

相关内容