-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