Bash 加快unix中硬链接的创建

Bash 加快unix中硬链接的创建,bash,shell,csv,unix,hardlink,Bash,Shell,Csv,Unix,Hardlink,我有一个工作,使60000+新的硬链接(30.3 GB)文件不同的名称。问题是,目录、旧文件名和新硬链接名存储在CSV文件中。现在,我正在编写一个脚本来自动完成它(解析csv、循环记录并创建链接)。下面是脚本中的偷窥 while read col1 col2 col3 col4 do if [ $counter -ne 0 ]; then if [ ! -f "$col2$col3.jpg" ]; then

我有一个工作,使60000+新的硬链接(30.3 GB)文件不同的名称。问题是,目录、旧文件名和新硬链接名存储在CSV文件中。现在,我正在编写一个脚本来自动完成它(解析csv、循环记录并创建链接)。下面是脚本中的偷窥

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
读取col1 col2 col3 col4时
做
如果[$counter-ne 0];
然后
如果[!-f“$col2$col3.jpg”];然后
#未找到文件,需要跟踪未找到的文件数量
echo“$col2$col3.jpg”
notfound=$(expr$notfound+1)
其他的
如果[$(expr$hash/10)-等式1];然后
哈希=$(expr$哈希-10)
fi
在“$col2$col3.jpg”中/testtemp-1/$hash/$col4.jpg
哈希=$(expr$哈希+1)
fi
其他的
计数器=$(expr$计数器+1)
fi
完成
完成这件事大约需要15分钟。请问有没有缩短时间的办法?这是一项相当时间敏感的任务,将在生产中完成(目前正在测试中)


附言:我需要散列,所以它不能被删除。“未找到”也是必需的$col2->directory name,$col3->file name,$col4->new hard link name

通过更改expr并跳过第一行检查逻辑,我设法将时间缩短到一个非常合理的时间(2分钟)。谢谢你的评论:)

你真的想用Bash来做这个吗?瓶颈可能在磁盘I/O中,但我肯定在Python或其他现代脚本语言中看到了一些可能更快(更优雅!)的东西。如果您使用Bash,则使用子shell将1添加到数字中效率很低且成本很高。Bash有内置的整数算法;你想用
((value++)
替换
value=$(expr$value+1)
hash
包含什么以及它在哪里定义?在这里检查你的脚本:你可以使用
${hash%?}
删除最后一个数字,而实际上根本不用除法。