答案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
然后使用 GNUparallel
和mv
:
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