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

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

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

  • Где мои данные 7za записываются в
  • У меня есть список файлов - результат команды find, как я могу использовать его для zip / tar файлов и удалять исходные файлы
  • Существуют ли какие-либо утилиты архива, которые могут сохранить атрибут даты, созданный в NTFS-3G?
  • Возможно ли интегрировать файлы zip и tar.gz в качестве каталога в файловую систему
  • Сжимать zip-файлы с более высоким сжатием
  • почему бы вам tar zip-файл
  • Извлеките один файл из zip-файла, только зная расширение
  • Подмена текста внутри сжатых файлов
  • Есть ли способ использовать sed или awk для фильтрации данных внутри заархивированного файла?
  • Отправка zip-файла, содержащего простой текстовый файл по электронной почте
  • Можно ли распаковать zip-файл, содержащий образ диска, а затем сохранить его на SD-карту за один шаг?
  • Linux и Unix - лучшая ОС в мире.