我在NFS上有一个包含2个million+节点的文件列表。我必须运行相当多的文件权限更改、所有者更改等等。当我运行chmod和chown (甚至rm或mv)之类的命令时,进程需要很长时间才能完成,因为它们都必须访问文件系统中的每个节点。
我想在此实现一些准形式的并行化,因为我已经通过NFS共享了访问权限。有没有办法拆散(碎片?)一个文件列表,以便在许多主机上运行chown,chmod,rm,mv等可以更快地完成总任务?想象一下,两个主持人从双方开始,并在中间类型的交易会议。
发布于 2017-12-22 21:19:13
Meet parallel (sudo apt install parallel):
GNU
parallel是一个shell工具,用于使用一台或多台计算机并行执行作业。作业可以是单个命令,也可以是必须针对输入中的每一行运行的小脚本。典型的输入是文件列表、主机列表、用户列表、URL列表或表列表。作业也可以是从管道读取的命令。然后,GNU并行可以将输入分成块,并将一个块并行地输送到每个命令中。 (…)对于输入的每一行,parallel将以行作为参数执行command。如果没有给出命令,则执行输入行。有几行将并行运行。GNU并行通常可以作为xargs或cat | bash的替代品。
find . -type f -print0 | parallel -0 chmod +w这将递归地查找当前目录中的每个文件并在其上运行chmod +w,同时执行多个进程--默认情况下每个CPU核心执行一个进程。
有关更多信息,请参见man parallel,特别是说明示例的精彩列表。youtube上也有一个带有示例视频的播放列表。
https://askubuntu.com/questions/988759
复制相似问题