使用其他列表中的名称重命名文件列表

时间:2011-07-11 08:13:28

标签: bash loops file-rename

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

mickey
donald
daffy 
bugs

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

我想迭代这些文件来实现:

filename1 => mickey 
filename2 => donald ...

您能为我提供此任务的示例代码吗?

5 个答案:

答案 0 :(得分:6)

为你做你的工作不是我的风格。我宁愿你发布你已经尝试过的东西,所以我可以帮你调试它,但是这个问题很简单,不管怎样我都会咬人。

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

答案 1 :(得分:4)

使用bash数组:

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

答案 2 :(得分:3)

let "count=1"

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

答案 3 :(得分:1)

我使用双重定向和新的文件描述符来按照给定的“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”),但我习惯不使用stdin;这样你就可以在循环中包含一个read语句来进行交互或控制,并且它不会被重定向的数据填充。

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

答案 4 :(得分:0)

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