Вы можете использовать gzip -r myfolderкоторый будет рекурсивно gzip файлы. Таким же образом вы можете разархивировать файлы, используя gunzip -r myfolder которые будут разархивировать файлы рекурсивно. Для получения дополнительной информации, man gzip
Валентин Байрами
12
Использование tar; он поддерживает параметры для сжатия. gzipразработан как дополнение tar, а не как замена.
Devnull
13
Обратите внимание, что предложение @ val0x00ff почти наверняка не то, чего вы хотите достичь.
Шадур
4
@Shadur, поэтому я опубликовал это, так commentкак это не было ответом на его вопрос.
Валентин Байрами
2
Чтобы продемонстрировать, что означает @Shadur. Данные файлы 1и 2в папке playground. gzip -r ./playgroundдаст вам 1.gzи 2.gz(и не более 1и 2файлы) в папке playground, а не ZIP-файл со всем в нем.
Джефф Сяо
Ответы:
660
Нет.
В отличие zip, gzipфункционирует в качестве алгоритма сжатия только .
Из - за различных причин , некоторые из которых слушать обратно в эпоху ленточных накопителей, Unix использует программу под названием tarархивировать данные, которые затем могут быть сжат с помощью программы сжатия , как gzip, bzip2, 7zipи т.д.
Чтобы «сжать» каталог, правильная команда будет
tar -zcvf archive.tar.gz directory/
Это будет сказать , tarчтобы
сжать его с помощью алгоритма z (gzip)
c (создать) архив из файлов в directory( tarпо умолчанию является рекурсивным)
v (многословно) список (в / dev / stderr, чтобы он не влиял на переданные по конвейеру команды) всех файлов, которые он добавляет в архив.
и сохранить вывод как f (файл) с именем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имеет много, много, много других вариантов и применений; Я от всей души рекомендую прочитать его man-страницу когда-нибудь.
Просто чтобы сделать вещи еще более явными, это в точности соответствует tar -cv directory | gzip > archive.tar.gz. Полученный архив может быть затем извлечен tar -zxvfили даже zcat file.tar.gz | tar -xv. Дело в том, что tar полностью независим от gzip, tarкоманда просто включает поддержку gzip для удобства.
Патрик
Я использую в tar cvzfтечение достаточно долгого времени. Следует отметить одну вещь: если вы используете Windows ( 7-zipчтобы указать), чтобы распаковать *.tar.gzфайл, это займет два раунда. Один - распаковать *.tar.gzфайл в *.tarфайл, второй - распаковать этот tar-файл в исходное содержимое. это увеличивает общее время распаковки, особенно для больших файлов (например, журналов)
Джефф Сяо
1
Влияет ли наименование архива на машины? Я знаю, что было бы неплохо, чтобы люди знали алгоритм, изначально использовавшийся для его архивирования (отсюда .gz), но кроме этого имеет ли значение, как вы называете архив?
hello_there_andy
3
@hello_there_andy Это не имеет значения для большинства юниксов, но Windows (и завершение Smart Tab в Linux) делает предположения на основе расширения имени файла.
Команда gzipне будет рекурсивно сжимать каталог в один zip-файл при использовании -rпереключателя. Скорее, он будет обходить эту структуру каталогов и упаковывать каждый найденный файл в отдельный файл.
#!/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 или же gzipdir /home/MyDirectory
Создаст /home/MyDirectory.tgz и удалит MyDirectory в случае успеха (!!!).
ungzipdir /home/MyDirectory.tgz
Создаст / home / MyDirectory и удалит /home/MyDirectory.tgz в случае успеха.
Чтобы заархивировать ВСЕ файлы в каталоге: find ./* -maxdepth 0 -type d -exec gzipdir {} \; (будьте осторожны с командой find, -exec echo {}сначала проверьте ее , и убедитесь, что вы не захватываете «./», который заархивирует каталог PARENT, возможно, нарушая весь ваш домашний каталог)
Андрей Лориен
1
Я рекомендую использовать pigz( параллельная реализация GZip )
Если у вас есть новый вопрос, задайте его, нажав кнопку « Задать вопрос» . Включите ссылку на этот вопрос, если это помогает обеспечить контекст. - Из обзора
Джефф Шаллер
2
@JeffSchaller: это ответ. Это очень неправильно (я считаю), но это, безусловно, ответ.
Скотт
1
@ize: Я уверен, что команда, которую вы разместили, на самом деле не использует gzip.
Даг
1
Очки за использование zip, как заданный вопрос, скорее всего, автору хотелось бы знать, что можно сделать ТОЧНО ТО ЖЕ ВСЕ, как он это делал на окнах. Печально, что большинство людей не хотят думать так далеко.
Флориан Хейгл
2
Сложно, когда в вопросе указывается ... «используя gzip».
Джефф Шаллер
1
Для полноты, если вы хотите сохранить файл в фоновом режиме, используйте ответ @ Shadur и добавьте &в конце:
gzip -r myfolder
который будет рекурсивно gzip файлы. Таким же образом вы можете разархивировать файлы, используяgunzip -r myfolder
которые будут разархивировать файлы рекурсивно. Для получения дополнительной информации,man gzip
tar
; он поддерживает параметры для сжатия.gzip
разработан как дополнениеtar
, а не как замена.comment
как это не было ответом на его вопрос.1
и2
в папкеplayground
.gzip -r ./playground
даст вам1.gz
и2.gz
(и не более1
и2
файлы) в папкеplayground
, а не ZIP-файл со всем в нем.Ответы:
Нет.
В отличие
zip
,gzip
функционирует в качестве алгоритма сжатия только .Из - за различных причин , некоторые из которых слушать обратно в эпоху ленточных накопителей, Unix использует программу под названием
tar
архивировать данные, которые затем могут быть сжат с помощью программы сжатия , какgzip
,bzip2
,7zip
и т.д.Чтобы «сжать» каталог, правильная команда будет
Это будет сказать ,
tar
чтобысжать его с помощью алгоритма z (gzip)
c (создать) архив из файлов в
directory
(tar
по умолчанию является рекурсивным)v (многословно) список (в / dev / stderr, чтобы он не влиял на переданные по конвейеру команды) всех файлов, которые он добавляет в архив.
и сохранить вывод как f (файл) с именем
archive.tar.gz
Команда
tar
предлагаетgzip
поддержку (через-z
флаг) исключительно для вашего удобства. Командаgzip
/ lib полностью отделена. Команда выше фактически такая же, какДля распаковки и распаковки архива в текущий каталог вы бы использовали
Эта команда фактически такая же, как
tar
имеет много, много, много других вариантов и применений; Я от всей души рекомендую прочитать его man-страницу когда-нибудь.источник
tar -cv directory | gzip > archive.tar.gz
. Полученный архив может быть затем извлеченtar -zxvf
или дажеzcat file.tar.gz | tar -xv
. Дело в том, что tar полностью независим от gzip,tar
команда просто включает поддержку gzip для удобства.tar cvzf
течение достаточно долгого времени. Следует отметить одну вещь: если вы используете Windows (7-zip
чтобы указать), чтобы распаковать*.tar.gz
файл, это займет два раунда. Один - распаковать*.tar.gz
файл в*.tar
файл, второй - распаковать этот tar-файл в исходное содержимое. это увеличивает общее время распаковки, особенно для больших файлов (например, журналов)Команда
gzip
не будет рекурсивно сжимать каталог в один zip-файл при использовании-r
переключателя. Скорее, он будет обходить эту структуру каталогов и упаковывать каждый найденный файл в отдельный файл.пример
до
Теперь запустите
gzip
командупосле
Если вы предпочитаете
tar
сжать структуру каталогов, то, вероятно, захотите использовать команду, а затем сжать полученный.tar
файл.пример
В результате получается следующий файл:
Вы можете подтвердить его содержание:
источник
Я написал эти 2 команды:
gzipdir
:ungzipdir
:(!!!) Пожалуйста, проверьте перед использованием (так как есть 'rm -f', который потенциально может удалить важные данные, если используется необычным образом).
Как пользоваться:
cd /home/; gzipdir MyDirectory
или жеgzipdir /home/MyDirectory
Создаст /home/MyDirectory.tgz и удалит MyDirectory в случае успеха (!!!).
ungzipdir /home/MyDirectory.tgz
Создаст / home / MyDirectory и удалит /home/MyDirectory.tgz в случае успеха.
источник
find ./* -maxdepth 0 -type d -exec gzipdir {} \;
(будьте осторожны с командой find,-exec echo {}
сначала проверьте ее , и убедитесь, что вы не захватываете «./», который заархивирует каталог PARENT, возможно, нарушая весь ваш домашний каталог)Я рекомендую использовать
pigz
( параллельная реализация GZip )tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz
источник
Ответ на вопрос «Могу ли я заархивировать всю папку, используя zip на linux?», Должен использовать синтаксис:
источник
Для полноты, если вы хотите сохранить файл в фоновом режиме, используйте ответ @ Shadur и добавьте
&
в конце:источник
Если ваш linux tar не поддерживает эту
-z
опцию, вы можете использовать следующее:источник