递归更改文件所有者,但不更改目录

递归更改文件所有者,但不更改目录

我有一个目录,其中有~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 ffind仅包含文件。

答案2

另一种方法是使用xargs。您需要使用-print0选项find以及 对应的-0选项xargs

find . -type f -print0 | xargs -0 chown newuser:newgroup

man find

-print0

在标准输出上打印完整文件名,然后空字符。 这允许文件名包含换行符或其他类型的空格以便处理 find 输出的程序能够正确解释。此选项对应于 xargs 的 -0 选项。

xargs也将正确处理ARG_MAX

相关内容