2017-10-11 34 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很高興聽到那個朋友! –