如果所有者不是 root:users,我尝试在目录下递归地将所有者更改为 root:users。
cd /dir/
find . \( ! -user root -o ! -group users \) -print0 | xargs -0 chown -vc root:users
我收到错误:
chown: missing operand after ‘root:users’
Try 'chown --help' for more information.
为什么我收到错误?我该如何修复它?
答案1
在 chown 上使用递归开关:
chown -R root:users dir
那应该可以了。
更多关于你有错误的原因:如果寻找命令找不到任何文件,然后乔恩将在末尾没有操作数的情况下执行,从而生成此错误。
如果您确实想坚持原来的命令格式,您可以添加-r切换到 xargs ,当没有找到文件时它应该会消除错误。
答案2
除了观察到您可以使用标志-R
to之外chown
,您收到错误消息的原因几乎可以肯定[1]是因为您没有需要更改的文件。 gnu 版本xargs
有一个额外的标志,-r
告诉 xargs 如果没有输入命令,则不要运行该命令。
然而使用xargs
是错误的方法,POSIX 版本find
将为您批量命令。使用
find . \( ! -user root -o ! -group users \) -exec chown -vc root:users {} +
注意最后的而不是使用示例中+
常见的。 With该命令针对每个匹配文件运行一次,但 with文件会分组并批量运行。\;
-exec
\;
+
在某些情况下,仍应使用 xargs,例如,如果您想从输入中读取并成对处理行,但这种情况很少见。几乎总是您希望每个文件运行一个命令,或者批量处理尽可能多的文件并每批运行一个命令。
[1] 根据 xargs 实现,您可能已经用文件准确地填充了许多命令缓冲区,但更可能的是根本没有文件。