既存の名前のように名前を変更したいディレクトリに複数のファイルがあります。
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
(これらは変数ではありません。)その後、別の順序で再結合します。$3
rename
bash
提案された結果に満足したら、変更または-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
やその他の印刷できない文字ではなくスペースです。