【问题标题】:Rename a list of file with names from another list使用另一个列表中的名称重命名文件列表
【发布时间】:2011-10-02 14:37:55
【问题描述】:

我在一个名为 lista.txt 的文件中有一个如下列表:

mickey
donald
daffy 
bugs

我有一个包含许多文件的文件夹:filename1, filename2, ... filenameN。

我想遍历那些文件来实现:

filename1 => mickey 
filename2 => donald ...

你能提供我这个任务的工作示例代码吗?

【问题讨论】:

  • 您是否有任何标准将文件夹中的文件映射到字符串?我问这个是因为:如果您使用 let say ls 来获取文件,您将按字母顺序排序,但最终,您可以有不同的映射 filename_X => string_Y

标签: bash loops file-rename


【解决方案1】:

为你做你的工作不是我的风格。我宁愿你发布你已经尝试过的东西,这样我可以帮你调试它,但是这个问题太简单了,我还是要咬一口。

x=1; for y in $(cat lista.txt); do mv $y filename$x; let x=$x+1; done

【讨论】:

  • 对不起,我的问题犯了一个严重的错误。真正的文件名没有编号,而是随意的。不是 f1,f2... fn。但是 f_a,f_pippo,f123 等等...如何与这两个列表进行交互?
【解决方案2】:
let "count=1"

for newname in $(cat lista.txt); do
  mv "filename$count" "$newname"
  let "count++"
done

【讨论】:

    【解决方案3】:

    使用 bash 数组:

    files=( * )
    i=0
    while read -r new_name; do
      mv "${files[$i]}" "$new_name"
      (( i++ ))
    done < lista.txt
    

    【讨论】:

      【解决方案4】:

      我使用带有新文件描述符的双重重定向来根据给定的“filelist.txt”重命名目录的所有flac文件:

      while read -u 9 filename ; do  
          read -u 8 newname 
          echo mv "$filename" "$newname" 
      done 9<<<"$(ls -1 *flac)" 8< filelist.txt
      

      目录中的每个 .flac 文件名都经过文件描述符 9 到变量“filename”,而在同一迭代中,filelist.txt 的每一行都经过文件描述符 8 到变量“newname”。

      是的,可以避免使用新的文件描述符之一,而只需使用默认的标准输入(删除“-u 9”和“9”),但我习惯于不使用标准输入;这样,您可以在循环中包含一个 read 语句以进行交互或控制,并且它不会被重定向的数据填充。

      回显用于“仅测试”,应在批准操作后删除。

      【讨论】:

        【解决方案5】:

        您可以使用小型 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. 通过单击“完成”按钮预览新名称并分配新名称。

        【讨论】:

        • 我在 gnome 下运行 krename5。我编写了一个简单的 js 函数,但是单击 Test... 按钮什么也没做。我可以在文件中保存和加载函数,但我看不到让函数 rename2 显示在函数对话框或插件的 js 选项卡中的方法。我可能做错了什么?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-23
        • 1970-01-01
        • 2020-09-23
        • 2020-12-03
        • 2022-08-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多