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