-1
我有一個工作,爲具有不同名稱的60000+(30.3 GB)文件創建新的硬鏈接。問題是,目錄,舊文件名和新硬鏈接名稱都存儲在一個CSV文件中。現在,我正在編寫一個腳本來自動執行它(解析csv,循環記錄和創建鏈接)。下面是劇本偷偷摸摸加速unix中的硬鏈接創建
while read col1 col2 col3 col4
do
if [ $counter -ne 0 ];
then
if [ ! -f "$col2$col3.jpg" ]; then
# File not found, need to track how much is not found
echo "$col2$col3.jpg"
notfound=$(expr $notfound + 1)
else
if [ $(expr $hash/10) -eq 1 ]; then
hash=$(expr $hash - 10)
fi
ln "$col2$col3.jpg" ./testtemp-1/$hash/$col4.jpg
hash=$(expr $hash + 1)
fi
else
counter=$(expr $counter + 1)
fi
done < test.csv
大約需要15分鐘才能完成這件事。我可否知道是否有任何想法縮短時間?這是一項非常時間敏感的任務,將在生產中完成(現在正在進行測試)。
PS:我需要散列,所以它不能被刪除。未找到也是必需的。 $ col2 - >目錄名稱,$ col3 - >文件名稱,$ col4 - >新的硬鏈接名稱
你是否在爲此而使用Bash?瓶頸可能在磁盤I/O上,但我當然可以看到有些東西可能會在Python或其他一些現代腳本語言中快得多(也更優雅!)。 – tripleee
如果您使用的是Bash,那麼將一個子shell添加到一個數字是非常低效和昂貴的。 Bash有內置的整數運算;你想用'((value ++))'替換'value = $(expr $ value + 1)'' – tripleee
'hash'包含了什麼,它在哪裏定義? – tripleee