テキストファイルからの大量のファイル名変更

テキストファイルからの大量のファイル名変更

約 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

関連情報