(Bash)重命名文件,但给它一个新的扩展名,将计数..(md5sum)

时间:2013-01-21 17:46:17

标签: bash rename md5sum

我需要重命名文件夹中的所有文件并为其指定新的文件扩展名。我知道如何用bash重命名文件。我遇到的问题是,我需要将其重命名为:

file.01 file.02 file.03并计算所有找到的文件。

有人能为我提供一个从哪里开始的例子吗?

这就是我需要的:

md5sum * | sed 's/^\(\w*\)\s*\(.*\)/\2 \1/' | while read LINE; do
   mv $LINE
done

但是这并没有给它一个来自file.01 file.02 file.03等的扩展名。

2 个答案:

答案 0 :(得分:2)

如果按字面意思读出你的要求......

counter=0
for file in *; do
  read sum _ <<<"$(md5sum "$file")"
  printf -v file_new "%s.%02d" "$sum" "$counter"
  mv -- "$file" "$file_new"
  (( counter++ ))
done

这比从md5sum的输出中读取文件名效率低,但更可靠,因为globbing安全地处理具有不寻常名称(换行符,特殊字符等)的文件。

答案 1 :(得分:0)

这一点:

i=0
for f in *
do
   if [ -f $f ]; then 
     i=`expr $i + 1` 
     if [ $i -lt 10 ]; then 
       i=0$i
     fi
     sum=`md5sum $f | cut -d ' ' -f 1` 
     mv $f $sum.$i 
   fi
done