長い可変長ファイル名のバッチ変更

長い可変長ファイル名のバッチ変更

既存の名前のように名前を変更したいディレクトリに複数のファイルがあります。

1937 - Snow White and the Seven Dwarves.avi
1940 - Pinocchio.avi

ターゲット名:

Snow White and the Seven Dwarves (1937).avi
Pinocchio (1940).avi

乾杯

答え1

Perlベースrename(時々とも呼ばれる)を使用している場合、prenameこれは実際には可能です。正規表現を知っていれば、はるかに簡単です。

rename -n 's!^(\d+) - (.*)\.(...)$!$2 ($1).$3!' *.avi

その機能は、ソースファイル名を3つの部分に分割することです。最初の例では、次のようになります。

  • 1937年
  • 白雪姫と七人の小人
  • 動画

これはコマンドで$1、、に割り当てられます。$2(これらは変数ではありません。)その後、別の順序で再結合します。$3renamebash

提案された結果に満足したら、変更または-n完全-vに削除することもできます。

答え2

これがbashだけを使って行う方法です。

cd movie_directory
ls -1 | while read line
do
  year=$(echo ${line} | awk '{print $1}')
  name=$(echo ${line} | cut -d " " -f 3- | cut -d"." -f 1)
  ext=$(echo ${line} | cut -d " " -f 3- | cut -d"." -f 2)
  newname=${name}" ("${year}")."${ext}
  mv "${line}" "${newname}"
done

仮定:

.
ファイル名には年の間にスペース文字は含まれておらず、ファイル-名は実際にはスペースtabやその他の印刷できない文字ではなくスペースです。

関連情報