
答案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