Обходное решение может быть должно использовать комбинацию 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
Как насчет просто этого?
$ 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
Si desea conservar el archivo .gz
, puede utilizar el siguiente :$ gunzip -c inputfile.gz >outputfile
Используйте эту команду, чтобы разархивировать (разархивировать gz-файлы )все файлы в текущем каталоге и сохранить исходные:
gunzip -k *.gz
Я получил его, зайдя в каталог и воспользовавшись gzip -d *.gz
.