Можно ли сжать целую папку с помощью gzip?

Можно ли сжать целую папку с помощью gzip?

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

решение1

Нет.

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

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

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

tar -zcvf archive.tar.gz directory/ 

tarЭто расскажет

  • сожмите его с помощьюз(gzip) алгоритм

  • с(создать) архив из файлов вdirectory( tarпо умолчанию рекурсивен)

  • в(подробно) вывести список (на /dev/stderr, чтобы не влиять на конвейерные команды) всех файлов, которые он добавляет в архив.

  • и сохранить вывод какф(файл) названarchive.tar.gz

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

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

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

tar -zxvf archive.tar.gz

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

gunzip < archive.tar.gz | tar -xv

tarимеет также много, много, МНОГО других опций и применений; я настоятельно рекомендую вам как-нибудь прочитать его страницу руководства.

решение2

Команда 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

решение3

Ответ на вопрос «Могу ли я сжать целую папку с помощью gzip [в Linux]?» заключается в том, что вы можете использовать программу zipвместо gzip, используя следующий синтаксис:

zip -r <zip file name> <folder to zip>

решение4

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

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

Связанный контент