web-dev-qa-db-ja.com

ディレクトリ内のすべての.gzファイルをgunzip

.txt.gzファイルがたくさんあるディレクトリがあります(名前が特定のパターンに従っていない場合)。

それらをgunzipする最も簡単な方法は何ですか?元の名前を保持して、whatevz.txt.gzからwhatevz.txtに変更したい

25
The Unfun Cat

これだけはどうですか?

_$ gunzip *.txt.gz
_

gunzipは、_.gz_サフィックスなしでgunzippedファイルを作成し、デフォルトで元のファイルを削除します(詳細は以下を参照)。 _*.txt.gz_は、一致するすべてのファイルにシェルによって展開されます。

この最後のビットは、ファイルの非常に長いリストに拡張される場合、問題を引き起こす可能性があります。その場合は、findと_-exec_を使用してください。


マニュアルページからgzip(1)

_gunzip takes a list of files on its command line and  replaces  each  file
whose  name  ends  with  .gz, -gz, .z, -z, or _z (ignoring case) and which
begins with the correct magic number with an uncompressed file without the
original  extension.
_

「元の名前」に関する注意

gzipは、圧縮時に使用されるファイル名を保存および復元できます。圧縮ファイルの名前を変更した場合でも、元の名前に復元されていることに驚かれる可能性があります。

Gzipのマンページから:

デフォルトでは、gzipは元のファイル名とタイムスタンプを圧縮ファイルに保持します。これらは、_-N_オプションを使用してファイルを解凍するときに使用されます。これは、圧縮ファイル名が切り捨てられた場合、またはファイル転送後にタイムスタンプが保持されなかった場合に役立ちます。

また、メタデータに保存されているこれらのファイル名は、fileでも表示できます。

_$ echo "foo" > myfile_orig
$ gzip myfile_orig 
$ mv myfile_orig.gz myfile_new.gz 
$ file myfile_new.gz 
myfile_new.gz: gzip compressed data, was "myfile_orig", last modified: Mon Aug  5 08:46:39 2019, from Unix
$ gunzip myfile_new.gz        # gunzip without -N
$ ls myfile_*
myfile_new

$ rm myfile_*
$ echo "foo" > myfile_orig
$ gzip myfile_orig
$ mv myfile_orig.gz myfile_new.gz 
# gunzip with -N
$ gunzip -N myfile_new.gz     # gunzip with -N
$ ls myfile_*
myfile_orig
_
44
gertvdijk

.gzファイルを保持する場合は、以下を使用できます:$ gunzip -c inputfile.gz >outputfile

0
sumion

次のコマンドを使用して、現在のディレクトリ内のすべてのファイルをgunzip(gzファイルを解凍)し、元のファイルを保持します。

gunzip -k *.gz
0
gansvv