我需要搜索没有用户或组的文件。
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
答案4
我尝试了特定的查找选项并遇到了问题,因此切换到此方法:
find $(mount | awk '!/:/ {printf "%s ", $3}') -xdev
这应该搜索所有未挂载 NFS 的文件系统。