Massenhaft Dateinamen ändern?

Massenhaft Dateinamen ändern?

Ich habe ein Problem damit, wie ich die Reihenfolge der SAC-Dateinamen ändern kann. Ich meine, ich habe diese Reihenfolge, aber ich muss sie in die zweite ändern, und diese Befehle sollten im Skript enthalten sein. Außerdem muss diese Änderung mithilfe von Spaltennummern erfolgen.

ALT

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

NEU

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

Lassen Sie mich den Code schreiben, den ich auf diese Weise fertigstellen möchte (wenn die Antworten auf diese Weise lauten, wäre das für mich hilfreicher) und ich weiß nicht, wie ich diesen Vorgang weiter abschließen kann.

#!/bin/bash

for sacfile in *SAC
do

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

done 

Antwort1

Vorausgesetzt, es handelt sich um Dateinamen mit fester Länge, sollte dies funktionieren.

#!/bin/bash

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

Wir verwendenBashs eingebaute Variablenmanipulationum den Dateinamen zu zerschneiden und nach unseren Wünschen neu anzuordnen. Wenn Sie zufrieden sind, können Sie das Echo vor der mvAnweisung entfernen

verwandte Informationen