awkを使用して複数のサブディレクトリのバイナリファイル名を変更する

awkを使用して複数のサブディレクトリのバイナリファイル名を変更する

複数のサブディレクトリにある複数のファイルの名前を変更することに成功せず、かなり長い間努力してきました。いくつかの背景情報:このファイルはバイナリ形式であり、2000年以降の地震データを含みます。すべてのデータをダウンロードして「seren」ディレクトリに保存しました。ダウンロードされたデータは複数のサブディレクトリに分かれており、日時ごとにスタンプされています(例:Event_2000_01_08_16_47_20)。各サブディレクトリにはCN.FRB..BHE.sac形式(またはいくつかのバリエーション)の複数のファイルがあり、一部はII.BORG.00.BHN.sac(デフォルトではNETWORK.STATION ..channel.sac形式)のように見えます。 。

すべてのEvent*サブディレクトリを繰り返し、*.sacファイルの名前をSKS.${NETWORK}.${STATION}.${CHANNEL}.SACに変更するbashスクリプトを作成しようとしています。デフォルトでは00部分を削除します。ファイルの中間

これまで私のコードは次のようになります。

#!/bin/bash
for all in ~/seren/Event*
do
cd "$all"
pwd
echo "ls | awk -F "." '{print $1}'"  ### this is me attempting to grab the network name to add onto the new file name
done
###### in place of the echo line above I have also tried:
network = $((ls | awk -F "." '}print $1}'))

ベストアンサー1

使用されませんawk。これが要件であるかどうかはわかりません。このスクリプトをあなたのディレクトリと同じディレクトリに置きますEvent_*

#!/bin/sh    
# Find *.sac files with 00 in the name and remove that part.

LIST=`find ./ -mindepth 2 -type f -name \*.00.\*.sac`

for f in $LIST
do
    dir=${f%/*}
    fName=${f##*/}
    # remove the file ext as well
    fName=${fName%.*}
    # remove the 00 from the file name
    nName=`echo $fName | sed 's/.00././'`
    # DEBUG MODE
    echo "f:[${f}] d:[${dir}] n:[SKS.${nName}.SAC]"
    # LIVE
    #mv -vf "${f}" "${dir}/SKS.${nName}.SAC"
done

まず、バックアップ/テストグループでこれを実行することをお勧めします。]

おすすめ記事