sedを使用して複数のファイルの名前を変更する

sedを使用して複数のファイルの名前を変更する

次のファイルセットがあります

top_axi_256_wrapper_05.02.01.14.00_sample06.tgz
top_axi_128_wrapper_05.02.01.14.00_sample06.tgz

05.02.01.14.00交換部品を使用したいです05_02_01_14_00。したがって、最終出力は次のように名前が変更されたファイルです。

top_axi_256_wrapper_05_02_01_14_00_sample06.tgz
top_axi_128_wrapper_05_02_01_14_00_sample06.tgz

私のディレクトリには、次の種類のファイル名を含めることもできます。

a72_a_0.0.0_0.00.04_ac_dc.tgz

ここでファイル名を次のように変更したいと思います。

a53_1c_256K_a_0_0_0_0_00_04_ac_dc.tgz

どうすればいいですか?

ベストアンサー1

基本的に、最後の点を除いた点を下線に置き換えたいと思います。

Bashのパラメータ拡張を使用すると、これを行うことができます。

for file in * ; do
    replace_all=${file//./_}
    newname=${replace_all%_*}.${replace_all##*_}
    mv "$file" "$newname"
done
  • //./_方法すべての点を下線に置き換える
  • %_*方法最後の下線の後のすべての項目を削除します。
  • ##*_方法最後の下線の前のすべての項目を削除します。

または、最初に拡張子を保存してから削除し、すべての点を下線に置き換えてから拡張子を再追加することもできます。これは読者に練習問題として残す。

おすすめ記事