我需要对驱动器上的 150 万个文件进行 chown。我目前正在执行:
sudo chown -R www-data:www-data /root-of-device
但运行时间太长了。我想知道是否有某种超快的低级方法来改变驱动器上的每个文件。
答案1
使用xargs -p
或 GNUparallel
可以大大加快速度。
答案2
不幸的是,我认为没有这样的事情,但如果有的话我会很惊喜。你可以用 C 编写自己的实现并对其进行大量优化。然而,成功与否取决于优化程度chown是开始。考虑到它是核心实用程序之一,我认为它相当优化。此外,您很可能受到 i/o 速度的限制。
我成功地避免了ls和R M通过管道传输结果寻找到参数,假设一个目录中有很多文件,即:
find /path/* | xargs rm
因此,大胆猜测一下,也许这可以加快chown,以防递归扫描文件系统的速度比寻找:
sudo find /path/* | xargs chown www-data:www-data
答案3
我也在使用 Amazon EC2,并且遇到了这个问题。有两件事:
修复当前情况:您必须处理速度缓慢的问题。也许您可以使用“screen”或类似的东西,以便该过程可以在后台继续。
修复未来的情况:您可以查看上游并首先查看文件是如何生成的。由于您提到了 www-data,我假设文件的使用者是 Apache。如果文件是从另一个程序(NFS、Samba、SSH 等)中删除的,请确保这些程序将用户:组设置为 www-data:www-data。