我已经尝试了相当长一段时间,但没有成功重命名位于多个子目录中的多个文件。一些背景信息:这些文件是二进制格式的,包含从 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
强烈建议您首先在备份/测试组上运行它:]