chown:“root:users”后缺少操作数

chown:“root:users”后缺少操作数

如果所有者不是 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

除了观察到您可以使用标志-Rto之外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 实现,您可能已经用文件准确地填充了许多命令缓冲区,但更可能的是根本没有文件。

相关内容