ファイル名を変更すると、4 番目と 6 番目の文字の後にダッシュが追加されます。

ファイル名を変更すると、4 番目と 6 番目の文字の後にダッシュが追加されます。

次のファイルがあります。

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コマンドは、名前を変更するために固定文字列のペアのみを受け入れます。

関連情報