使用 awk 重命名多个子目录中的二进制文件

使用 awk 重命名多个子目录中的二进制文件

我已经尝试了相当长一段时间,但没有成功重命名位于多个子目录中的多个文件。一些背景信息:这些文件是二进制格式的,包含从 2000 年开始的地震数据。我已经下载了所有数据并将其放在目录“seren”中。下载的数据被分成不同的子目录,并按日期时间标记,即Event_2000_01_08_16_47_20。在每个子目录中都有多个 CN.FRB..BHE.sac 格式(或某些变体)的文件,有些看起来像 II.BORG.00.BHN.sac(本质上的格式是 NETWORK.STATION..通道.sac)。

我正在尝试编写一个 bash 脚本,该脚本将循环遍历所有 Event* 子目录,并将 *.sac 文件重命名为 SKS.${NETWORK}.${STATION}.${CHANNEL}.SAC - 本质上是删除该文件中间的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

强烈建议您首先在备份/测试组上运行它:]

相关内容