複数の日付に対してこのスタイルで名前が付けられたファイルがあり02.04.11 DJ Kilbot.mp3
ますDJ Kilbot 2011-02-04.mp3
。つまり、現在の形式はMM.DD.YY DJ-NAME.mp3
あり、DJ-NAME YYYY-MM-DD.mp3
数年前のファイルの場合、最も簡単な方法は何ですか? ?
答え1
cd
そのディレクトリに移動して、次のコマンドを実行します(使用perl-rename
)。最初の「プレビュー」です。
rename -n 's/^([0-9]{2})\.([0-9]{2})\.([0-9]{2}) (.*)\.mp3$/$4 20$3-$1-$2.mp3/' *
02.04.11 DJ Kilbot.mp3 -> DJ Kilbot 2011-02-04.mp3
出力が満足であれば、実際に実行してみてください。
rename 's/^([0-9]{2})\.([0-9]{2})\.([0-9]{2}) (.*)\.mp3$/$4 20$3-$1-$2.mp3/' *
説明する
rename -n
:テスト「模擬実行」を実行します。's/FOO/BAR/'
正規表現をFOO
に置き換えますBAR
。^([0-9]{2})\.([0-9]{2})\.([0-9]{2}) (.*)\.mp3$
:キャプチャする正規表現です。文字列の先頭に一致し、その後にドットで区切られた3つのグループ(つまり、2つの連続した数字)が続きます^
(エスケープされている場合)。その後、スペースと括弧は置き換える内容をキャプチャします。[0-9]{2}
\.
(.*)\.mp3$
()
$4 20$3-$1-$2.mp3
$4
:4番目のキャプチャグループ()以上のDJ名を、(.*)
指定された文字列の残りの部分(3番目、1番目、2番目のグループなど)に置き換えます。*
:ディレクトリ内のすべてのファイルに対して機能します。
単純化する
この正規表現には、いくつかのエラーチェック機能が組み込まれています。すべてのファイルの名前が一貫して指定されていると確信している場合は、次のように少し単純化できます。
rename 's/^(..)\.(..)\.(..) (.*)\.mp3$/$4 20$3-$1-$2.mp3/' *
答え2
いいえrename
:
for file in *.mp3
do
no_extension=${file%.mp3}
the_date=$(echo "${no_extension}" | cut -d ' ' -f 1)
year=20${the_date:6}
month=${the_date:0:2}
day=${the_date:3:2}
date_part=${year}-${month}-${day}
dj_part=$(echo "${no_extension}" | cut -d ' ' -f 2-)
new_file="${dj_part} ${date_part}.mp3"
mv "${file}" "${new_file}"
done
説明する:
for file in *.mp3
.mp3
拡張子で終わる現在のディレクトリのすべてのファイルを繰り返します。${file%.mp3}
.mp3
以下を使用して、ファイルの末尾から拡張子を削除します。bash 文字列操作$(echo ${no_extension} | cut -d ' ' -f 2-)
cut
文字で区切られた文字列を解析できるこのユーティリティを使用して、ファイル名の日付部分を抽出します。- 次に、部分文字列を抽出して日付形式を変更します。
"${dj_part} ${date_part}.mp3"
私たちが作った部品を文字列で連結しただけです。mv "${file}" "${new_file}"
ファイル名の変更
答え3
ファイル名がまさにこのように指定されたとします。
for file in "*.mp3";do
date="${file:0:8}" #get the date in the filename.
dj="${file%.mp3}" #strip the extension off the filename.
dj="${dj:8}" # get dj name.
mv -nv $file "$dj $date.mp3" # -n don't overwrite files.
done
答え4
パイの名前を変更するGUIがあり、自動プレビューが可能です。
これを元のファイル名パターンフィールドに入力します。
{#}.{#}.{#} {X}.mp3
名前が変更されたファイル名モードに入ります。
{4} {3}-{1}-{2}.mp3
唯一の欠点は、「Windows」モード(1、10、11、2、3、4...)でソートされることです。