gunzip все .gz файлы в каталоге

Обходное решение может быть должно использовать комбинацию find ... -prune и tar исключить указанные каталоги.

На Mac OS X --exclude опция GNU tar кажется, работает, как это должно все же.

В следующем тестовом сценарии каталоги /private/var/log/asl и /private/var/log/DiagnosticMessages должны быть исключены из сжатого архива /private/var/log каталог.

# all successfully tested in Bash shell on Mac OS X (using gnutar and gfind)

# sudo port install findutils  # for gfind from MacPorts

sudo gnutar -czf ~/Desktop/varlog.tar.gz /private/var/log --exclude "/private/var/log/asl" --exclude "/private/var/log/DiagnosticMessages"

sudo gnutar -czf ~/Desktop/varlog.tar.gz  --exclude "/private/var/log/asl" --exclude "/private/var/log/DiagnosticMessages" /private/var/log

set -f # disable file name globbing
sudo gnutar -czf ~/Desktop/varlog.tar.gz  --exclude "/private/var/log/asl" --exclude "/private/var/log/Diagnostic*" /private/var/log

# combining GNU find and tar (on Mac OS X)

sudo gfind /private/var/log -xdev -type d \( -name "asl" -o -name "DiagnosticMessages" \) -prune -o -print0 | 
   sudo gnutar --null --no-recursion -czf ~/Desktop/varlog.tar.gz --files-from -

# exclude even more dirs
sudo gfind /private/var/log -xdev -type d \( -name "asl" -o -name "[Dacfks]*" \) -prune -o -print0 | 
    sudo gnutar --null --no-recursion -czf ~/Desktop/varlog.tar.gz --files-from -


# testing the compressed archive

gnutar -C ~/Desktop -xzf ~/Desktop/varlog.tar.gz

sudo gfind /private/var/log ~/Desktop/private \( -iname DiagnosticMessages -or -iname asl \)

sudo rm -rf ~/Desktop/varlog.tar.gz ~/Desktop/private
24
30.10.2015, 01:38
4 ответа

Как насчет просто этого?

$ gunzip *.txt.gz

gunzip создаст gunzipped файл без .gz снабдите суффиксом и удалите исходный файл по умолчанию (см. ниже для деталей). *.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
42
27.01.2020, 19:41

Si desea conservar el archivo .gz, puede utilizar el siguiente :$ gunzip -c inputfile.gz >outputfile

0
27.01.2020, 19:41

Используйте эту команду, чтобы разархивировать (разархивировать gz-файлы )все файлы в текущем каталоге и сохранить исходные:

gunzip -k *.gz
7
27.01.2020, 19:41

Я получил его, зайдя в каталог и воспользовавшись gzip -d *.gz.

0
26.08.2020, 14:16

Теги

Похожие вопросы