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

먼저 백업/테스트 그룹에서 이를 실행하는 것이 좋습니다.]

관련 정보