ファイルの名前を変更しますが、名前にファイルの元のタイムスタンプを残します。

ファイルの名前を変更しますが、名前にファイルの元のタイムスタンプを残します。

何百ものファイルを含むリストがあります。現在は次のとおりです。

filename.New_20160901.dat
filename.New_20160902.dat
...

までお待ちください

filename.New_<current date>.dat

現在、ログインディレクトリからファイルをインポートするプロセスがありますが、ファイル名の形式はまったく異なります。

私がしたいのは、ファイル名を変更しますが、日付は維持することです。たとえば、ファイルを変更すると、次のようになります。

$ mv filename.New_20160902.dat FILE_NAME_NEW.20160902.dat

1つのファイルについては簡単ですが、一連のファイルについてはどうすればよいですか?古いファイル名の日付部分を抽出して変数として保存し、古いファイルmvを新しいファイル名で新しいファイルに保存し、日付部分を同じままにしたいと思います。

ありがとう

答え1

努力する

rename -n s/filename.New_/FILE_NAME_NEW./ filename.New*

提案された名前の変更に同意する場合は、実行する必要はありません。-n

答え2

これを試してください。

for x in *; do
    mv "${x}" FILE_NAME_NEW."${x#filename.New_}"
done

echomvファイル名を変更する前に効果を確認できるように、まず使用してください。 「${x}」はファイル名を持つ変数(例filename.New_20160901.dat:)、「${x#filename.New_}」は先頭にある場合に削除されたファイル名filename.New_(例20160901.dat:)です。

答え3

タイムスタンプを含むファイル(他のファイルを除く)を一致させるには、以下を使用します。

#!/bin/bash 

for x in filename.New_[0-9]*.dat; do
    echo "file --> $x"

    echo    mv "${x}" "${x/filename.New_/FILE_NAME_NEW.}"
done

実際に移動するには(スクリプトで選択したファイルに満足した後)、mvの前のエコーを削除してください。

関連情報