批处理文件使用文件名列表重命名

时间:2014-01-30 10:04:48

标签: bash file rename batch-rename filelist

我需要重命名超过1500 * .jpg的文件。 我有文件名,文件名列表有2列,标签分隔:

  • 1305 1979
  • 1310 173
  • 1311 172

旧文件名 - 新文件名

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

我如何检查第一列和旧文件名的前4位数字并重命名为2列中的另外4位数字?

//对不起我的英文

3 个答案:

答案 0 :(得分: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,因此脚本会输出错误。

答案 1 :(得分:2)

尝试此操作,并在验证完所需后删除回声。 changefile是包含更改的文件的名称

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

您应该反转订单更改文件,以确保在130之前和之前的13之前应用1306

答案 2 :(得分:1)

我已经在另一个问题上发布了这个答案,但是这个问题在问题,关键字和复杂性方面似乎更相关,我也会在这里添加它。

您可以在启用javascript插件的情况下使用小型Linux应用程序名称krename。它是一个具有强大功能的免费工具。

  1. 安装Krename并打开它
  2. 添加文件
  3. 转到“插件”标签,然后将您的javascript函数添加到“函数定义”部分,如下所示:

    var files = [
        "Mickey",
        "Donald",
        "Duffy"
    ];
    
    function rename(){
      // krename_index is one of many special variables which can be added via ui
      return files[krename_index];
    }
    

这是一个简单的脚本,可以完成工作,但是它可以随您的需求而复杂。

  1. 转到文件名选项卡,然后在模板输入中调用函数,如下所示:

    [js; rename()]

您可以在上面的代码前面加上$,以保留原始文件名并将其添加到文件中。您可以使用“功能”按钮进行进一步的实验。

  1. 预览新名称并通过单击“完成”按钮完成重命名。