複数のファイルを圧縮して名前を変更する

複数のファイルを圧縮して名前を変更する

gunzip1 つのコマンド/スクリプトで複数のファイルの名前を変更できるかどうかを知りたいです。

次の形式のファイルがたくさんあります:

test.20120708191601.DAT.3599502593.gz
test.20120708201601.DAT.99932140.gz
test.20120708204600.DAT.1184686967.gz
test.20120708212100.DAT.824089664.gz
test.20120708215100.DAT.1286044098.gz
test.20120708222100.DAT.1414234861.gz

gunzip以降のすべてを削除して.DAT、次の形式にする必要があります。

test.20120708191601.DAT
test.20120708201601.DAT
test.20120708204600.DAT
test.20120708212100.DAT
test.20120708215100.DAT
test.20120708222100.DAT

答え1

これを試して:

for file in *.gz; do
  gunzip -c "$file" > "${file/.DAT*/.DAT}"
done

このアプローチではgunzip、 のオプションを使用して、圧縮されていないストリームを標準出力 ( -c) に出力します。これにより、2 回目の名前変更呼び出しを行わずに、別のファイルにリダイレクトできます。名前の変更は、bash置換 (任意のグロブ パターンに一致し.DAT*、 に置き換える.DAT) を使用して、ファイル名変数自体に対して行われます。ループ自体は、現在のディレクトリ内で で終わる名前のファイルを反復処理するだけです.gz

関連情報