查找:chown:参数列表过长

我正在尝试将组或所有者为1001的所有文件的权限更改为1000。

我已经在一个小目录上测试了这两个命令,它们都可以工作,但是当我尝试从根目录开始使用它们时,出现“参数列表过长”错误

find /share/CACHEDEV2_DATA/Container -user 1001 -exec chown 1000 {} +
find /share/CACHEDEV2_DATA/Container -group 1001 -exec chgrp 1000 {} +

我是否可以通过其他方式执行命令来解决此错误?

wsbnsb 回答:查找:chown:参数列表过长

如果您使用-X选项,它可以根据系统的ARGMAX传递尽可能多的参数,则可以使用 GNU Parallel 非常简单有效地做到这一点。

我不是要检查此机器,因此在翻录整个文件系统之前,请在一个只有几个文件的副本的小目录中进行尝试:

find <STARTDIRECTORY> -user 1001 -print0 | parallel --dry-run -X -0 chown 1000 {}

如果看起来正确,请再次运行它,但要省略--dry-run

,

简短版本:

给定文件数量,将所有参数放在一个命令上将失败(参数太多或命令行太长)。使用xargs批生产线将解决线长问题,并提高性能。

# Preferred - using NUL to separate files
find /share/CACHEDEV2_DATA/Container -user 1001 -print0 | xargs -0 -L50 chown 1000

# Without protection against "special" file names (risky)
find /share/CACHEDEV2_DATA/Container -user 1001 | xargs -L50 chown 1000

长答案:

正如一些评论者所指出的那样,问题的根源是find命令的尾部“ +”(而不是更常用的尾部“;”)。来自info find

  

... Unix的SVR4版本引入了一些细微变化,其中涉及   用'+'代替命令:

 find /var/tmp/stuff -mtime +90 -exec /bin/rm {} \+
     

上面使用的'-exec'导致'find'建立一个长命令   行,然后发出它。 ...

因此,find提供了两种填充选项-每行一个文件,每行所有文件。

很明显,这是与'xargs'集成的情况,后者提供了更灵活的批处理行方式-通过参数计数(-L ...)或行大小(-s)。另外,应考虑使用空终止符来支持文件名包含空格,魔术字符('*')等的情况。

,

这有效:

chown -R john:build /tmp/src
本文链接:https://www.f2er.com/3128855.html

大家都在问