我有一个目录,其中有~50k 个目录和~1m 个文件。
我想更改所有文件的所有者(或权限),但不更改目录。这是因为我试图从远程服务器 SCP 附加文件(约 150k 个目录和约 360 万个文件)。
我拥有的目录是远程目录的一部分,但是 scp 失败了......
如果我再次运行 SCP,它将重新开始并覆盖我已经从远程目录复制的文件。
答案1
您可以使用find
,它还有一个额外的好处,即ARG_MAX
不会在此过程中触发。从父目录:
find . -type f -exec chown newowner {} +
为了chmod
:
find . -type f -exec chmod 644 {} +
-type f
将find
仅包含文件。
答案2
另一种方法是使用xargs
。您需要使用-print0
选项find
以及 对应的-0
选项xargs
:
find . -type f -print0 | xargs -0 chown newuser:newgroup
从man find
:
-print0
在标准输出上打印完整文件名,然后空字符。 这允许文件名包含换行符或其他类型的空格以便处理 find 输出的程序能够正确解释。此选项对应于 xargs 的 -0 选项。
xargs
也将正确处理ARG_MAX
。