从文本文件重命名大量文件

从文本文件重命名大量文件

我有一个包含大约 7,000 个文件的文件夹,每个文件都有编号,例如 74857.mkv 74858.mkv 等。

在此输入图像描述

我还有一个文本文件,其中包含所有文件号和文件名:

按此顺序:

在此输入图像描述

我想将每个文件从编号重命名为名称;一个例子:

74857.mkv > 拍摄 S01 E01.mkv

74858.mkv > 拍摄 S01 E02.mkv

请使用任何命令来执行此操作,我一直在手动执行此操作,并且仅在 5 天内完成了 50 个文件!

答案1

假如说“这是名称示例”是当前文件名上方的字符串,.mkv即给定的

$ cat file.txt 
Taken S01 E01
74857.mkv
Taken S01 E02
74858.mkv

你实际上想要

74857.mkv > 拍摄 S01 E01.mkv

74858.mkv > 拍摄 S01 E02.mkv

然后使用 GNUparallelmv

parallel -N2 echo mv -- {2} {1}.mkv < file.txt

echo一旦您确信它正在编写正确的命令,请将其删除。

答案2

如果我是你,我会小批量地做这些,并用副本进行测试,但这样的事情应该对你有用

while read n; do read f; mv $f "$n.${f##*.}"; done < file

在开始之前,建议您检查一下输出

while read n; do read f; echo mv $f "$n.${f##*.}"; done < file > checkfile

确保重命名文件中没有错误。

如果您有足够的空间和时间进行复制以保证原件的安全,直到您满意为止,那就更安全了......

while read n; do read f; cp $f "/a/safe/location/$n.${f##*.}"; done < file

笔记

mv要反转该过程,您只需反转命令中名称的顺序即可

mv "$n.${f##*.}"  $f

答案3

perl

perl -lne '$dst = "$_.mkv"; $src = <>; chomp $src; rename $src, $dst
  or warn "$src -> $dst: $!\n"' your-file

zsh

zmodload zsh/files # to get a builtin mv
while IFS= read -ru3 dst && IFS= read -ru3 src; do
   mv -- "$src" "$dst.mkv"
done 3< your-file

相关内容