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

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

約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

その後、GNUを使用してparallel次のようにします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

関連情報