借助文本文件重命名文件

借助文本文件重命名文件

我正在尝试重命名大量文件,但不知道如何将新名称融入文本文件。

我有许多视频文件想要重命名,使用文本文件中的新列表。例如

dfhjkg.avi
wyrtrr.avi
jtylktmn.avi
ertjnn.avi

要用另一个文本文件中的新文件名重命名:

File_01_01.avi
File_01_02.avi
File_01_03.avi
File_01_04.avi 

我正在使用 Kubuntu 12.04。

答案1

Emacs有一个很棒的功能叫做dired,它允许您列出某个目录中的文件,编辑它们,然后将更改提交到磁盘。

你必须:

  1. 启动 Emacs;

  2. 按下C-x d即可在所需目录中导航;

  3. 按下C-x C-q启用编辑器;

  4. 使用您喜欢的所有功能编辑文件名:查找/替换、列模式编辑等;

  5. 完成后按C-c C-c保存更改。


或者你可以给马斯伦尝试一下(我没有),它应该是一种独立的dired

答案2

我用过重命名工具,特别qmv是该包中的“ ”命令,多年来一直用于这种事情。

默认情况下,“ qmv”在每一行上显示两次文件名,您只需修改第二次出现的文件名。这样您就可以始终看到原始文件名。但是,对于长文件名,这可能会很麻烦,因为长文件名会导致编辑器换行,所以我有这个别名:

alias qqmv="qmv -fdo"

“ ”选项改变文本文件中使用的-f格式,“ ”是格式规范,基本上告诉它只列出文件名一次。qmvdo

答案3

假设您有两个文件old.txtnew.txt,每个文件包含一行需要重命名的文件。然后您可以简单地调用:

paste old.txt new.txt | while IFS=$'\t' read -r old new; do 
  mv -i -- "$old" "$new"
done

这仅在文件名不包含换行符或制表符时才有效。因此,您创建一个名为的文件old.txt

dfhjkg.avi
wyrtrr.avi
jtylktmn.avi
ertjnn.avi

new.txt

File_01_01.avi
File_01_02.avi
File_01_03.avi
File_01_04.avi 

然后运行上面的脚本。在你的例子中,它会调用:

mv -- dfhjkg.avi File_01_01.avi
mv -- wyrtrr.avi File_01_02.avi
mv -- jtylktmn.avi File_01_03.avi
mv -- ertjnn.avi File_01_04.avi

…但mv仍会要求您确认是否有文件将被覆盖。用于echo mv …仅打印命令而不是执行命令。

相关内容