【问题标题】:Batch files rename using filename list使用文件名列表重命名批处理文件
【发布时间】:2014-02-22 13:37:38
【问题描述】:

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

//对不起我的英语

【问题讨论】:

  • 我不明白:文件只是13051305_01.jpg...?意思是,mv col1 col2 会成功吗?
  • 我的旧文件名在 1305、1310、1311 等之后有不同的结尾。我需要将其重命名为 2 列中的名称。
  • 这是 Windows 还是 Unix 环境?

标签: bash file rename batch-rename filelist


【解决方案1】:

使用如下所示的循环:

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】:

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

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

    您应该颠倒更改文件的顺序,以确保在 130 之前和 13 之前应用 1306

    【讨论】:

      【解决方案3】:

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

      您可以使用小型 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-25
        • 2014-02-26
        • 2019-06-08
        • 2013-06-25
        • 1970-01-01
        • 1970-01-01
        • 2017-03-01
        • 2012-12-10
        相关资源
        最近更新 更多