更改批量文件名?

更改批量文件名?

我有一个关于如何更改该 sac 文件名的顺序的问题。我的意思是我有这个命令,但我需要将其更改为第二个命令,并且这些命令应该在脚本上。此外,此更改必须使用列号来完成。

老的

2007.084.00.22.50.8930_2007.084.01.26.10.1430.GE.ISP..BHZ.D.SAC
2007.084.00.22.51.2930_2007.084.01.26.54.8430.GE.ISP..BHN.D.SAC
2007.084.00.25.42.9430_2007.084.01.27.59.2430.GE.ISP..BHE.D.SAC

新的

2007.084.01.26.10.1430_2007.084.00.22.50.8930.GE.ISP..BHZ.D.SAC
2007.084.01.26.54.8430_2007.084.00.22.51.2930.GE.ISP..BHN.D.SAC
2007.084.01.27.59.2430_2007.084.00.25.42.9430.GE.ISP..BHE.D.SAC

让我写下我尝试以这种方式完成的代码(如果答案是这样的话,这对我会更有帮助),我不知道如何继续完成这个过程。

#!/bin/bash

for sacfile in *SAC
do

echo $sacfile
n2=`echo $sacfile | cut -c 24-45`
echo $n2

done 

答案1

假设它们是固定长度的文件名,这应该可以工作。

#!/bin/bash

for sacfile in *SAC
do
    new_sacfile=${sacfile:23:22}_${sacfile:0:22}${sacfile:45}
    echo mv -v ${sacfile} ${new_sacfile}
done 

我们正在使用bash 的内置变量操作剪切文件名并根据我们的需要重新排列。当你高兴时,你可以删除mv语句前面的回显

相关内容