Accelerate/parallelize 巨大的硬链接循环
Accelerate/parallelize massive hard-linking loop
我正在编写一个脚本,该脚本生成一个包含数千个二进制文件的文件夹,这些二进制文件将被捆绑到不同产品的多个安装程序中。脚本的很大一部分 "copies" 文件从不同的任意位置到临时路径,为 installer/tarball.
生成所需的输出结构
这个操作中最慢的一个部分是一个巨大的循环,基本上看起来像:
for i in $(find /some/tmp/path -iname "*")
do
ln "${i}" "/TEMP1/${i}"
done
这样做的原因是,它是一种更快的方式 "copy" 文件到所需位置以生成最终输出 tarball,并且它不会使用那么多磁盘 space作为文件的实际副本。
但是,这个循环非常慢(硬 link 30,000 个文件大约需要 15 分钟)。假设这是 运行 在配备高端 SSD 的非常强大的机器上,这是否是可以通过使用 parallel
类型的工具包装它或只是后台处理来大大加快的任务所有 ln
操作,跟踪 PID
为 ln
操作,并检查是否所有进程最后都成功退出?或者,还有其他一些我没有考虑过的加速方法吗?
这应该可以解决问题。
for i in $(find /some/tmp/path -iname "*")
do
ln "${i}" "/TEMP1/${i}" &
done
wait
让我知道它是否有效。
此致!
我正在编写一个脚本,该脚本生成一个包含数千个二进制文件的文件夹,这些二进制文件将被捆绑到不同产品的多个安装程序中。脚本的很大一部分 "copies" 文件从不同的任意位置到临时路径,为 installer/tarball.
生成所需的输出结构这个操作中最慢的一个部分是一个巨大的循环,基本上看起来像:
for i in $(find /some/tmp/path -iname "*")
do
ln "${i}" "/TEMP1/${i}"
done
这样做的原因是,它是一种更快的方式 "copy" 文件到所需位置以生成最终输出 tarball,并且它不会使用那么多磁盘 space作为文件的实际副本。
但是,这个循环非常慢(硬 link 30,000 个文件大约需要 15 分钟)。假设这是 运行 在配备高端 SSD 的非常强大的机器上,这是否是可以通过使用 parallel
类型的工具包装它或只是后台处理来大大加快的任务所有 ln
操作,跟踪 PID
为 ln
操作,并检查是否所有进程最后都成功退出?或者,还有其他一些我没有考虑过的加速方法吗?
这应该可以解决问题。
for i in $(find /some/tmp/path -iname "*")
do
ln "${i}" "/TEMP1/${i}" &
done
wait
让我知道它是否有效。 此致!