我正在开发一个脚本,该脚本生成一个包含数千个二进制文件的文件夹,这些二进制文件将捆绑到不同产品的多个安装程序中。脚本的一个重要部分是将文件从各个任意位置“复制”到临时路径,以便为安装程序/ tarball生成所需的输出结构。
此操作中最慢的部分是一个大规模的循环,基本上看起来像:
for i in $(find /some/tmp/path -iname "*")
do
ln "${i}" "/TEMP1/${i}"
done
这样做的原因是,将文件“复制”到所需位置以生成最终输出tarball的速度更快,并且它不会使用与文件的实际副本一样多的磁盘空间。
然而,这个循环非常缓慢(硬链接30,000个文件大约需要15分钟)。假设这是在一台带有高端SSD的功能非常强大的机器上运行的,那么这可以通过使用parallel
类型工具包装它来大大加快,或者只是背景化所有{{{ 1}}操作,跟踪ln
操作的PID
,并检查所有进程最后是否成功退出?或者,是否有其他方法可以加快这一点,我没有考虑过?
答案 0 :(得分:1)
这应该可以解决问题。
for i in $(find /some/tmp/path -iname "*")
do
ln "${i}" "/TEMP1/${i}" &
done
wait
让我知道它是否有效。 此致!