次のファイルがあります。
20150716_something-here
20150716_something-heretoo
20150716_something-hereaswell
次に、名前を変更する必要があります。
2015-07-16_something-here
2015-07-16_something-heretoo
2015-07-16_something-hereaswell
使ってみようPerlの実装~のrename
注文する(許可された答えに対する私のコメントを参照)しかし私は成功しませんでした。
答え1
Bashの組み込みサブストリング拡張を使用します。
for f in 2015* ; do
mv "$f" "${f::4}-${f:4:2}-${f:6}"
done
答え2
そしてsed
:
LC_ALL=C sed -e 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1_\2_\3/' <file
答え3
rename
非常に強力なツールですが、一般的に私は単純さを好みます。mmv
(複数移動)ユーティリティ:
mmv '????????_*' '#1#2#3#4-#5#6-#7#8_#9'
検索パターンの?
単一文字を表し、ランダムに長い*
文字シーケンスを表します。代替モードでは、それぞれは対応するモード#<number>
または?
検索モードを表します。また*
、角かっこで囲まれた文字範囲(例)もサポートされています。?
*
mmv
[a-f]
(mmv
名前変更のすべての競合は、作業を開始する前にテストされるため、上書きによってファイルが失われることはありません。)
答え4
perl-rename
私のディストリビューションには、Perlスタイルの正規表現を使用してファイル名を一括変更するコマンドがあります。このrename
コマンドは、名前を変更するために固定文字列のペアのみを受け入れます。