如何使用find排除NFS目录?

gas*_*ter 12 find nfs

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

find / -nouser -o -nogroup
Run Code Online (Sandbox Code Playgroud)

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

hym*_*mie 11

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


Sté*_*las 10

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

find / -fstype nfs -prune -o \( -nouser -o -nogroup \) -print
Run Code Online (Sandbox Code Playgroud)

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

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

find / ! -fstype jfs2 -prune -o \( -nouser -o -nogroup \) -print
Run Code Online (Sandbox Code Playgroud)

不要写:

find / -fstype jfs2 \( -nouser -o -nogroup \) -print
Run Code Online (Sandbox Code Playgroud)

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

请注意-aAND如果省略则为隐式)优先于-oOR),因此您需要注意是否需要括号。

上述正确命令的缩写是:

find / \( \( ! -fstype jfs2 \) -a -prune \) -o \
  \( \( -nouser -o -nogroup \) -a -print \)
Run Code Online (Sandbox Code Playgroud)