1

我需要重命名超过 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 位数字?

//对不起我的英语不好

4

3 回答 3

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.jpg并且1305_2.jpg不能将它们都重命名为1979.jpg,则脚本将打印错误。

于 2014-01-30T10:18:03.463 回答
2

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

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

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

于 2014-01-30T10:17:44.883 回答
1

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

您可以使用小型 linux 应用程序名称 krename,并打开 javascript 插件。它是一个免费工具,具有非常强大的重命名功能。

  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. 单击“完成”按钮预览新名称并完成重命名。
于 2019-05-16T03:57:33.093 回答