ファイル名から文字列を削除し、BASHに別の文字列を保持します。

ファイル名から文字列を削除し、BASHに別の文字列を保持します。

次のファイルがたくさんあります。

2007.365.00.00.00.0000.9A.CVSV4..HHZ.D.SAC.GAP.decim10.GAP

結局私が望むのはこれです。

2007.365.00.00.CVSV4.HHZ.SAC

私はこれを試しました:

for file in /home/joana/Desktop/*GAP; do
mv "$file" `echo "$file" | sed -e 's/00.0000.9A.//' -e 's/.D//' -e 's/.GAP.decim10.GAP//'`;
done

知っている、私は理解します:

mv: cannot move ‘/home/joana/Desktop/2007.365.00.00.00.0000.9A.CVSV4..HHZ.D.SAC.GAP.decim10.GAP’ to ‘/home/joanaesktop/2007.365.00.00.CVSV4..HHZ.D.SAC’: No such file or directory

誰でも私を助けることができますか?多くの例を見ましたが、おそらく何かが間違っているようです。

ベストアンサー1

出力に満足したら、エコーを削除してください(mvより前)。

 for file in *GAP 
    do 
        NEW_FILE=$(echo ${file} | awk -F. '{print $1,$2,$3,$4,$8,$10,$12}' OFS=.)
        echo mv ${file} ${NEW_FILE}
     done

おすすめ記事