Mam katalog z dużą ilością .txt.gz
plików (w których nazwy nie są zgodne z określonym wzorcem).
Jaka jest najprostsza droga do gunzip
nich? Chcę zachować ich oryginalne nazwy, aby przechodzili od whatevz.txt.gz
dowhatevz.txt
Co powiesz na to?
$ gunzip *.txt.gz
gunzip
utworzy plik typu gunzip bez .gz
sufiksu i domyślnie usunie oryginalny plik (szczegóły poniżej). *.txt.gz
zostanie rozwinięty przez twoją powłokę do wszystkich pasujących plików.
Ten ostatni bit może sprawić kłopoty, jeśli rozwinie się do bardzo długiej listy plików. W takim przypadku spróbuj użyć find
i -exec
wykonać zadanie za Ciebie.
Ze strony podręcznika 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 może przechowywać i przywracać nazwę pliku używaną podczas kompresji. Nawet jeśli zmienisz nazwę skompresowanego pliku, możesz być zaskoczony tym, że przywraca on pierwotną nazwę.
Z strony podręcznika gzip:
Domyślnie gzip zachowuje oryginalną nazwę pliku i znacznik czasu w skompresowanym pliku. Są one używane podczas dekompresji pliku z
-N
opcją. Jest to przydatne, gdy nazwa skompresowanego pliku została obcięta lub gdy znacznik czasu nie został zachowany po przesłaniu pliku.
Te nazwy plików przechowywane w metadanych można również wyświetlać za pomocą 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
Użyj tego polecenia, aby spakować (rozpakować pliki gz) wszystkie pliki w bieżącym katalogu i zachować oryginalne:
gunzip -k *.gz