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 操作,跟踪 PIDln 操作,并检查是否所有进程最后都成功退出?或者,还有其他一些我没有考虑过的加速方法吗?

这应该可以解决问题。

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

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