何百ものファイルを含むリストがあります。現在は次のとおりです。
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
echo
mv
ファイル名を変更する前に効果を確認できるように、まず使用してください。 「${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の前のエコーを削除してください。