提问人:bproxauf 提问时间:7/17/2023 最后编辑:bproxauf 更新时间:7/17/2023 访问量:148
为大量文件/目录设置访问权限的最快方法?
Fastest way to set access permissions for a large number of files / directories?
问:
我想为大量文件和目录设置访问权限。在如何提高更改文件和文件夹权限的性能?和 https://superuser.com/a/91938/813482 中,介绍了用于设置权限的几种变体,其中包括:
变式1:
find /path/to/base/dir -type d -exec chmod 755 {} +
find /path/to/base/dir -type f -exec chmod 644 {} +
变式2:
find /path/to/base/dir -type d -print0 | xargs -0 chmod 755
find /path/to/base/dir -type f -print0 | xargs -0 chmod 644
变式3:
chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
以下哪一项应该是最有效的?在对我使用的目录的快速测试中,与变体 1 相比,变体 2 将时间从 30 多秒减少到 3 秒以上(一个数量级),因为它不需要单独调用每个文件。变体 3 发出了警告,因为某些目录名称/文件名包含空格,并且无法访问这些目录。变体 3 甚至可能比变体 2 略快,但我不确定,因为这可能与无法进入目录(?chmod
答:
1赞
KamilCuk
7/17/2023
#1
以下哪一项应该是最有效的?
变式1.
我你真的想要速度,穿越一次,而不是两次。
find /path/to/base/dir '(' -type d -exec chmod 755 {} + ')' -o '(' -type f -exec chmod 644 {} + ')'
如果文件或目录的数量大于平台上的最大参数数,则变体 2 非常有用。
变体 3 非常糟糕,其中 find 的结果没有引用,shell 会进行分词和文件名扩展。例如,如果任何路径具有空间或星形,它将严重失败。
评论
0赞
bproxauf
7/17/2023
我可以看到遍历一次的速度优势。但是,与遍历两次的变体 1 相比,变体 2 在遍历两次时更快。遍历一次的变体 2 不应该更快吗?
0赞
KamilCuk
7/17/2023
您测试了数百万个文件?即我质疑测量方法。另外,我怀疑您在版本 1 之后测试了版本 2,这意味着路径在缓存中。
0赞
bproxauf
7/17/2023
该目录大约有 10400 个文件和 2800 个目录。你是对的,因为我在变体 2 之后运行了变体 1。无论如何,您的解决方案(0.83s)确实比变体2(0.70 + 2.77 = 3.47s)更快。
评论