加速/并行化大规模硬链接循环

时间:2017-10-11 20:18:55

标签: linux bash performance hardlink ln

我正在开发一个脚本,该脚本生成一个包含数千个二进制文件的文件夹,这些二进制文件将捆绑到不同产品的多个安装程序中。脚本的一个重要部分是将文件从各个任意位置“复制”到临时路径,以便为安装程序/ tarball生成所需的输出结构。

此操作中最慢的部分是一个大规模的循环,基本上看起来像:

for i in $(find /some/tmp/path -iname "*")
do
    ln "${i}" "/TEMP1/${i}"
done

这样做的原因是,将文件“复制”到所需位置以生成最终输出tarball的速度更快,并且它不会使用与文件的实际副本一样多的磁盘空间。

然而,这个循环非常缓慢(硬链接30,000个文件大约需要15分钟)。假设这是在一台带有高端SSD的功能非常强大的机器上运行的,那么这可以通过使用parallel类型工具包装它来大大加快,或者只是背景化所有{{{ 1}}操作,跟踪ln操作的PID,并检查所有进程最后是否成功退出?或者,是否有其他方法可以加快这一点,我没有考虑过?

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题。

for i in $(find /some/tmp/path -iname "*")
do
    ln "${i}" "/TEMP1/${i}" &
done
wait

让我知道它是否有效。 此致!