gunzip
1 つのコマンド/スクリプトで複数のファイルの名前を変更できるかどうかを知りたいです。
次の形式のファイルがたくさんあります:
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
。