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


14

我的目录有〜50k目录和〜1m文件。

我想更改所有文件的所有者(或权限),但不更改目录。这是因为我正在尝试从远程服务器中获取SCP的其他文件(〜150k目录和〜3.6m文件)。

我拥有的目录是远程目录的一部分,但是scp失败...

如果我再次运行SCP,它将通过覆盖已经从远程目录复制的文件重新开始。

Answers:


20

您可以使用find,它还有一个额外的优势,即ARG_MAX不会在此过程中触发。从父目录:

find . -type f -exec chown newowner {} +

对于chmod

find . -type f -exec chmod 644 {} +

-type ffind仅文件。


1
真的很棒!谢谢!chmod和chown都为+1
Marcus Brunsten 2015年

2
那么find不触发ARG_MAX?我一直以为会。您总是会学到一些东西:)
kos 2015年

5

另一种替代方法是使用xargs。你需要使用-print0带有选项find和相应-0的选项xargs

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

来自man find

-打印0

在标准输出上打印完整的文件名,后跟一个空字符。这允许包含换行符或其他类型的空格的文件名可以由处理查找输出的程序正确解释。此选项与xargs的-0选项相对应。

xargs也会正确处理ARG_MAX


2
find..exec处理奇怪的文件名..是什么让您认为它呢?
heemayl 2015年

1
@heemayl我进行了一些测试,看来您是对的。我站得住了。感谢您指出,我更新了答案。
美联社
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.