2014-01-30 181 views
1

我需要重命名超过1500 * .jpg文件。 我有2列的文件名列表的文本文件,制表符分隔:使用文件名列表重命名批处理文件

  • 1305 1979年

旧名 - 新的文件名

  • 1305_1.jpg - 1979
  • 1310_main_origin.jpg - 1 73
  • 1311_2.jpg - 172

如何我可以检查从第一列和旧文件名前4位和2列重命名为另一4位?

//对不起我的英文

+0

我不明白:文件只是'1305'或'1305_01.jpg' ...?意思是说,将'mv col1 col2'做成它? – fedorqui

+0

我的旧文件名在1305,1310,1311等之后有不同的结尾 我需要将它重命名为2列中的名称。 – RSH

+0

这是Windows还是Unix环境? – Graeme

回答

4

使用一个循环,如下图所示:

while read -r old new 
do 
    arr=(${old}_*.jpg) 
    if ((${#arr[@]} == 1)) 
    then 
     mv "${arr[0]}" "$new.jpg" 
    else 
     echo "Error: Multiple files found for $old: ${arr[@]}" 
    fi  
done < file 

请注意,有一个安全检查以确保您没有多个具有相同前缀的文件。例如,如果您有1305_1.jpg1305_2.jpg,则无法将它们重命名为1979.jpg,因此脚本将显示错误。

2

试试这个,并在验证它是你想要的后删除回声。 changefile是包含该文件的名称更改

while read from to; do 
    echo "mv ${from}* $to" 
done < changefile 

你应该倒序changefile确保1306施加比之前130和比前13