他のフォルダのファイル名を変更する

他のフォルダのファイル名を変更する

各ディレクトリに複数のファイルがある以下のディレクトリがたくさんあります。

.
 ├── 20150320
 ├── 20150321
 ├── 20150322
 ├── 20150323
 ├── 20150324
 ├── 20150325
 ...

その後、各ディレクトリの各ファイルを繰り返し、ファイルを別の形式に変換する小さなスクリプトを作成しました。たとえば、次のようになります。

#!/bin/sh

path="/home/juve/Projectes/leon_CC"

echo "SAC conversion"

for folder in $path/*/; do
  cd $folder
  Files=*BHZ
  for f in *BHZ; do
     /opt/mseed2sac-2.3/mseed2sac -v -C HHZ $f
     rm -r $f
  done
done

変換は変更したいファイル名を 。形式で出力します CA.UTG2..HHZ.D.2015.080.225956.SAC。必要なのは、2015.080.225956.UTG2.HHZ.SACファイル拡張子がある場所に名前を変更することです。SAC

私はrename-perlこれを使用しています。これまで、私はさまざまな成功を収め、次の方法を使用しました。

rename -n 's/.{3}(.*)/$1/'これを生成することはUTG2..BHZ.D.2015.080.225956.SAC私に必要なものの一部です。

試行するとrename -n 's/(.+)(.+)(.+)(.+)(.+)(.+)(.+)(\.SAC)/$4$5$6$1$2'エラーが発生します。Substitution replacement not terminated at line 1, in:

どんなアドバイスも本当にありがとうございます。

編集:答えが見つかりました。

rename -n 's/(.+)\.(.+)\.(.+)\.(.+)\.(.+)\.(.+)\.(.+)(\.SAC)/$5.$6.$7.$2$3$8/'

すべてのコメントをお寄せいただきありがとうございます。

ベストアンサー1

最後を逃した/:

rename -n 's/(.+)(.+)(.+)(.+)(.+)(.+)(.+)(\.SAC)/$4$5$6$1$2/' CA.UTG2..HHZ.D.2015.080.225956.SAC
#                                                          ^

次の正規表現が必要です。

(\d+)\.(\d+)\.(\d+).......

おすすめ記事