我正在运行这样的东西:
find . -maxdepth 1 -type f -note -iname "*.gpg" | sort | while read file ; do
echo "Encrypting $file..."
gpg --trust-model always --recipient "[email protected]" --output "$file.gpg" \
--encrypt "$file" && rm "$file"
done
这运行得很好,但 GPG 似乎没有针对使用多核进行加密操作进行优化。我正在加密的文件大小约为 2GB,而且我有相当多的文件。我希望能够并行运行 X 个作业来加密文件,然后删除它们。我该如何做到这一点,例如一次限制 8 个作业?
答案1
如果您安装GNU 并行您可以轻松地完成您想要完成的任务的工具:
$ find . -maxdepth 1 -type f -note -iname "*.gpg" | sort | \
parallel --gnu -j 8 --workdir $PWD ' \
echo "Encrypting {}..."; \
gpg --trust-model always \
--recipient "[email protected]" --output "{}.gpg" \
--encrypt "{}" && rm "{}" \
'
细节
上面的代码获取 的输出find
并将其运行到parallel
,并且一次运行 8 个。到处都会出现{}
正在传递的文件名,这些文件find
名将替换{}
这些位置中的 。
参考
答案2
答案3
我编写了一个易于使用的 Perl 脚本,可以控制同时运行的最大命令数:https://github.com/matmu/parallelize_cmds
您可能感兴趣。