答え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'
検索パターン内のは?
1 つの文字を表し、 は*
任意の長さの文字列を表します。置換パターンでは、各 は検索パターン内#<number>
の対応する?
または を表します。および*
に加えて、は括弧内の文字範囲 ( など) をサポートします。?
*
mmv
[a-f]
(mmv
作業を開始する前に名前の変更で競合がないかテストするため、上書きによってファイルが失われるリスクはありません。)
答え4
私のディストリビューションにはperl-rename
、Perl スタイルの正規表現を使用してファイルを一括で名前変更できるコマンドがあります。このrename
コマンドは、名前変更に固定文字列のペアのみを受け入れます。