2017-10-11 37 views
0

我正在处理一个脚本,该脚本会生成一个文件夹,其中包含数千个将被捆绑到不同产品的多个安装程序中的二进制文件。脚本的一大部分将来自各个任意位置的文件“复制”到临时路径,以便为安装程序/ tarball生成所需的输出结构。加速/并行化大规模硬链接环

此操作的单一最慢的部分是一个巨大的环,基本上是这样的:

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

这是正在做的原因是,它是一种更快的方式“复制”文件到所需位置生成最终的输出压缩包,并且不会像文件的实际副本那样使用尽可能多的磁盘空间。

但是,这个循环非常慢(大约需要15分钟来硬连接30,000个文件)。假设这是在一台配备了顶级SSD的非常强大的机器上运行的,那么这可以通过用parallel类型的工具包装它,或者仅仅背景所有的ln操作,跟踪PID对于ln操作,并检查所有进程是否成功退出?或者,还有其他一些方法可以加快我没有考虑过的情况吗?

回答

1

这应该可以做到。

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

让我知道它是否有效。 关心!

+1

工作很好。令人惊讶的是,它比使用GNU并行更快**。 – DevNull

+0

@DevNull很高兴听到那个朋友! –