複数のファイル名を変更してファイルの前に日付を追加する

複数のファイル名を変更してファイルの前に日付を追加する

1つ以上のtar.gzファイルを含むフォルダがあります。スクリプトの実行時に各ファイルの前に現在の日付を追加したいと思います。

たとえば、

2つのファイル名(このファイルは毎日生成されますが、名前は変わりません):

file1.tar.gz 
file2.tar.gz

最初の日(2011-10-07)では、これら2つのファイルの名前は次のように変更されます。

2011-10-07_file1.tar.gz
2011-10-07_file2.tar.gz

翌日(2011-10-08)は次のように変更されました。

2011-10-08_file1.tar.gz
2011-10-08_file2.tar.gz

最後に、フォルダには次のファイルが含まれています。

2011-10-07_file1.tar.gz
2011-10-07_file2.tar.gz
2011-10-08_file1.tar.gz
2011-10-08_file2.tar.gz

1本のワイヤでこれを達成するには? 「名前の変更」コマンドを試しましたが、ファイルの前ではなくファイルの後にのみ日付を追加できます。

私のコード

cdate=`date +"%Y-%m-%d"`; rename .gz .gz.$cdate *.gz

ベストアンサー1

明らかに重要なのは、すでに日付プレフィックスを持つファイルの名前を変更しないことです。

cdate=$(date +"%Y-%m-%d")
shopt -s extglob
for file in !([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]*.gz); do
  mv "$file" "${cdate}_$file"
done

おすすめ記事