Могу ли я закрепить всю папку с помощью gzip?

Я пытаюсь застегнуть папку в unix. Можно ли это сделать с помощью команды gzip?

  • Распакуйте архив с более чем одной записью
  • Как распаковать несколько каталогов с zip-файлами, которые также содержат подкаталоги с zip-файлами?
  • Как я рекурсивно grep через сжатые архивы?
  • Разархивировать архив с одним файлом и переименовать вывод в соответствии с именем архива
  • Как перенаправить вывод программы в ZIP-файл?
  • Замещать содержимое папки без включения самой папки
  • Как zip рекурсивно все подкаталоги, содержащие только текстовые файлы
  • Параллельно читать содержимое заархивированного файла без извлечения
  • 5 Solutions collect form web for “Могу ли я закрепить всю папку с помощью gzip?”

    Нет.

    В отличие от zip , gzip функционирует только как алгоритм сжатия.

    Из-за различных причин, которые некоторые из них прислушиваются к эпохе ленточных накопителей, Unix использует программу с именем tar для архивирования данных, которая затем может быть сжата с помощью программы сжатия, такой как gzip , bzip2 , 7zip и т. Д.

    Чтобы «застегнуть» каталог, правильная команда будет

     tar -zcvf archive.tar.gz directory/ 

    Это скажет tar чтобы c (создать) архив из файлов в directory ( tar рекурсивный по умолчанию), сжимайте его с помощью алгоритма z (gzip), сохраните вывод в виде f (файла) с именем archive.tar.gz , и v (verbosely) list (on / dev / stderr, чтобы он не влиял на команды с каналами) все файлы, которые он добавляет в архив.

    Команда tar предлагает поддержку gzip (через флаг -z ) исключительно для вашего удобства. Команда gzip / lib полностью разделена. Вышеупомянутая команда фактически такая же, как и

     tar -cv directory | gzip > archive.tar.gz 

    Чтобы распаковать и распаковать архив в текущий каталог, вы должны использовать

     tar -zxvf archive.tar.gz 

    Эта команда фактически такая же, как

     gunzip < archive.tar.gz | tar -xv 

    tar имеет много, много, МНОГО других вариантов и использует; Я сердечно рекомендую читать через его manpage когда-то.

    Команда gzip не будет рекурсивно сжимать каталог в один ZIP-файл при использовании ключа -r . Скорее, он будет ходить по этой структуре каталогов и заархивировать каждый файл, который он находит, в отдельный файл.

    пример

    до

     $ tree dir1/ dir1/ |-- dir11 | |-- file11 | |-- file12 | `-- file13 |-- file1 |-- file2 `-- file3 

    теперь запустите команду gzip

     $ gzip -r dir1 

    после

     $ tree dir1/ dir1/ |-- dir11 | |-- file11.gz | |-- file12.gz | `-- file13.gz |-- file1.gz |-- file2.gz `-- file3.gz 

    Если вы предпочитаете застегивать структуру каталогов, скорее всего, вы захотите использовать команду tar , а затем сжать полученный файл .tar .

     $ tar zcvf dir1.tar.gz dir1/ 

    пример

     $ tar zcvf dir1.tar.gz dir1/ dir1/ dir1/file1 dir1/file2 dir1/dir11/ dir1/dir11/file11.gz dir1/dir11/file12.gz dir1/dir11/file13.gz dir1/file3 

    Это приводит к следующему одиночному файлу:

     $ ls -l | grep tar -rw-rw-r-- 1 saml saml 271 Oct 1 08:07 dir1.tar.gz 

    Вы можете подтвердить его содержимое:

     $ tar ztvf dir1.tar.gz drwxrwxr-x saml/saml 0 2013-10-01 08:05 dir1/ -rw-rw-r-- saml/saml 0 2013-10-01 07:45 dir1/file1 -rw-rw-r-- saml/saml 0 2013-10-01 07:45 dir1/file2 drwxrwxr-x saml/saml 0 2013-10-01 08:04 dir1/dir11/ -rw-rw-r-- saml/saml 27 2013-10-01 07:45 dir1/dir11/file11.gz -rw-rw-r-- saml/saml 27 2013-10-01 07:45 dir1/dir11/file12.gz -rw-rw-r-- saml/saml 27 2013-10-01 07:45 dir1/dir11/file13.gz -rw-rw-r-- saml/saml 0 2013-10-01 07:45 dir1/file3 

    Я написал эти две команды:

    gzipdir :

     #!/bin/bash if [[ -d $1 ]]; then cd "$1" cd .. base=$(basename "$1") tar -zcvf "$base.tgz" "$base" if [[ $? == 0 && -f "$base.tgz" ]]; then rm -rf "$base" fi else echo "Usage: $0 DIRECTORY"; fi 

    ungzipdir :

     #!/bin/bash if [[ -f $1 ]]; then base=${1%%.*} file=$(basename "$1"); dir=$(basename "$base"); if [[ ! -d $base ]]; then mkdir "$base" cd "$base" cd .. tar -xvf "$file" if [[ $? == 0 && -d "$dir" ]]; then rm -f "$file" fi else echo "Directory $base already exists. Nothing done." fi else echo "Usage: $0 file.tgz"; fi 

    (!!!) Пожалуйста, проверьте перед использованием (поскольку существует «rm -f», который может потенциально удалить важные данные, если используется необычным способом).

    Как использовать

    cd /home/; gzipdir MyDirectory cd /home/; gzipdir MyDirectory или gzipdir /home/MyDirectory

    Создаст /home/MyDirectory.tgz и удалит MyDirectory при успехе (!!!).

    gunzipdir /home/MyDirectory.tgz

    Будет создавать / home / MyDirectory и удалять /home/MyDirectory.tgz с успехом.

    Если ваш linux tar не поддерживает параметр -z вы можете использовать следующее:

     tar -cvf - dir | gzip > dir.tar.gz 

    Я рекомендую использовать pigz ( параллельная реализация GZip )

    tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz

    Linux и Unix - лучшая ОС в мире.