如果您使用-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