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
  • //./_手段すべてのドットをアンダースコアに置き換える
  • %_*手段最後のアンダースコアの後のすべてを削除します
  • ##*_手段最後のアンダースコアまですべて削除します

または、最初に拡張子を保存し、それを削除し、すべてのドットをアンダースコアに置き換えて、拡張子を再度追加することもできます。読者の練習として残しておきます。

答え2

-basedユーティリティは、検索と置換演算子や変換演算子だけでなく、任意のステートメントを使用してファイルの名前を変更できますperl(ファイル名を変更する内容に必ず設定してください)。renameperls///y//$_

からman rename

「rename」は、最初の引数として指定されたルールに従って、指定されたファイル名を変更します。perlexpr 引数は、$_指定されたファイル名の少なくとも一部について Perl の文字列を変更することが期待される Perl 式です。指定されたファイル名が式によって変更されない場合、ファイル名は変更されません。コマンド ラインでファイル名が指定されていない場合、ファイル名は標準入力から読み取られます。

例えば:

rename 'my($b,$e) = m/^(.*)\.([^.]+)$/; $b =~ s/\./_/g; $_="$b.$e"' files

これにより、ファイル名が基本名 ($b) と拡張子 ($e) に分割されます。次に、$b のすべてのピリオド ( .) がアンダースコアに置き換えられます。最後に、$_が に設定されます"$b.$e"

出力(-v詳細オプション付き):

$ touch 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

$ rename -v 'my($b,$e) = m/^(.*)\.([^.]+)$/; $b =~ s/\./_/g; $_="$b.$e"' *
a72_a_0.0.0_0.00.04_ac_dc.tgz renamed as a72_a_0_0_0_0_00_04_ac_dc.tgz
top_axi_128_wrapper_05.02.01.14.00_sample06.tgz renamed as top_axi_128_wrapper_05_02_01_14_00_sample06.tgz
top_axi_256_wrapper_05.02.01.14.00_sample06.tgz renamed as top_axi_256_wrapper_05_02_01_14_00_sample06.tgz

ちなみに、ステートメント-nをテストするときに使用してくださいrename。続きman rename:

-n、-nono

アクションなし: 名前を変更するファイルの名前を印刷しますが、名前は変更しません。

perlはrenameほとんどのディストリビューションでパッケージ化されており(例えばrenameDebianのパッケージ)、https://metacpan.org/release/ファイルの名前変更

関連情報