Как мне сжать / разархивировать в командной строке Unix?


540

Как создать и извлечь zip-архивы из командной строки?


3
@joachim, вы должны задать вопрос в вопросе и дать ответ в ответе. Там нет проблем с ответом на ваши собственные вопросы, но не как часть самого вопроса, так как это разрушает все преимущество SO-сообщества "голосует против лучшего ответа". Кроме того, это, вероятно, лучше подходит для суперпользователя, поскольку это не связано с программированием.

2
Где вы будете документировать, как выйти в Интернет и проверить SO, если вы забыли свой логин?

@ rlb.usa: я работаю в разных местах на разных серверах. Использование SA для такой заметки, как я вижу, помогает и другим.
Иоахим

Ответы:


663

Обычно используется tarдля создания несжатого архива и / gzipили bzip2для сжатия этого архива. Соответствующее gunzipи bunzip2команды могут быть использованы для распаковывать указанный архив, или вы можете просто использовать флаги на tarкомандах для выполнения распаковки.

Если вы имеете в виду конкретно к формату Zip файлов , вы можете просто использовать zipи unzipкоманды.

Сжать:

zip squash.zip file1 file2 file3

или заархивировать каталог

zip -r squash.zip dir1

Чтобы распаковать:

unzip squash.zip

это распакует его в ваш текущий рабочий каталог.


72
Лично я всегда использую zip -r9 archive.zip files...синтаксис (-r = рекурсивный -9 = максимальное сжатие).
амфетамина

3
Как примечание: zipможно создавать множество разных разновидностей архивов .ZIP, а также использовать много разных компрессоров. С другой стороны, существует ряд других инструментов сжатия, названных аналогично: 7-Zip, gzip, bzip2, rzip и т. Д., Которые не являются взаимозаменяемыми.
Полемон

5
Если вы не хотите, чтобы родительский каталог был включен:cd dir1; zip -r ../squash.zip *
Marinos An

Я запутался, я сделал это и получил длинный список инфляций и извлечений, но когда я проверяю каталог, он пуст, сохраняете для оригинального файла почтового индекса? Куда все это идет?
Летний разработчик

11
Для записи, используйте unzip -d myfolder squash.zipдля извлечения в отдельный новый каталог ( myfolder) вместо того, чтобы помещать все файлы непосредственно в текущий каталог, что может раздражать, если файл zip содержит много файлов и каталогов на верхнем уровне. Это имитирует работу большинства инструментов для распаковки пользовательского интерфейса.
Александр Климетчек,

64

Существует действительно огромное количество различных способов сжатия и распаковки в производных UNIX, поэтому я собираюсь предположить, что вы имели в виду «zip» в общем смысле, а не в конкретном формате файла.

Вы можете архивировать файлы (в сжатом формате) с помощью tarпрограммы GNU :

tar -zcvf myfile.tgz .

который будет делать текущий каталог. Замените .другими именами файлов, если вы хотите что-то еще.

Чтобы распаковать этот файл, используйте:

tar -zxvf myfile.tgz

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

Если нет, вы можете просто использовать с tar cvfпоследующим gzip(снова, если доступно) для сжатия и gunzipзатем tar xvf.


Для конкретной обработки файлов формата ZIP, я бы порекомендовал скачать 7zipи использовать это - он распознает огромное разнообразие форматов файлов, включая ZIP.


Или используйте tar jcvf file.tar.bz2...для сжатия в формате bzip2 или tar Jcvf file.tar.xz ...для сжатия xz.
OldTimer

4
Я отклонил ваш ответ, потому что вопрос в том, как работать с zip-архивами, а не с tar-файлами.
Морская звезда

3
@Starfish, это, безусловно, в ваших правах, спасибо, по крайней мере, за объяснение, почему так много людей не тратят время на это :-) Я взял «zip» в более общем смысле (сжатие), а не в конкретном формате, так что я сделаю это более ясным.

Имейте в виду, что архивы tar могут работать некорректно при переходе с одной платформы на другую, от Mac до Linux и наоборот. Zip намного безопаснее, так как работает корректно на всех системах.
user1751825

Полагаю, технически это gzip, так что все в порядке. Я полагаю. Хотя, очевидно, не то, о чем спрашивал вопрос.
Сова

30

Если у вас не установлены пакеты zip и unzip и у вас есть java, вы можете использовать jarдля распаковки:

jar -xf file.zip

3
Не мой сервер, нет разархивировать, zip, 7z, ничего ... И это сработало. Спасибо!
Дариуш

2
Это отличный совет.
Морская звезда

29

Ну, когда дело доходит до распространения файлов для различных операционных систем, я бы рекомендовал 7-zip .

Обычно в пакете p7zipвы получаете команду 7zand 7za, с помощью которой вы можете создавать свои собственные архивы 7z.

7zaтакже может распаковывать стандартные ( pkzip ) zip-архивы (и создавать их также с помощью -tzipпереключателя).

Сжимая:

7za a archive.7z file1 file2 directory/

Распаковка:

7za x archive.7z

Он также может создавать самораспаковывающиеся архивы с помощью -sfxпереключателя:

7za a -sfx archive.exe files1 file2 dir

Я рекомендую этот метод, если пользователи Windows не могут открыть архивы 7z (если вы хотите посоветовать инструмент для этого: PeaZip ).

Если вы хотите использовать тот же алгоритм сжатия с вашими архивами, используйте -Jпереключатель с tar:

tar cJf archive.tar.xz file1 file2 dir

xzинструмент UNIX, который использует LZMA2 для сжатия, но работает так gz, как bz2работает Это даже работает как фильтр.

7z не создает архивы с полной информацией о файловой системе в UNIX, поэтому вам нужно использовать ее tarперед использованием 7z (но, поскольку 7z хранит другую информацию о tarфайле, я рекомендую использовать xz, так как он предназначен для него):

tar cf - file1 file2 dir | 7za z -si archive.tar.7z

2
Возможно, я должен добавить этот ответ atool, это хороший маленький инструмент, который делает использование различных компрессоров более удобным. Привязать это к aи создать архив становится a arc.7z folder/или извлекать простоеa arc.7z
полемон

21
unzip <filename>

а также

zip -r archive.zip <filename> [filename]

Вам необходимо убедиться, что эти команды установлены через менеджер пакетов. Это не сложнее, чем использовать что-либо еще в командной строке. Это, конечно, проще, чем создавать архивы с помощью tar.


Я знаю, что это старая тема, но это лучший ответ. Не говорит о 7z или смоле, это сжато и прямо в точку
Кайл

4

BSD Tar также может сделать это

bsdtar acf bravo.zip alfa.jpg

Или же:

bsdtar xf bravo.zip

tarПреимущество BSD заключается в поддержке множества дополнительных форматов сжатия по сравнению с GNU tarи другими форматами tar. Возможно, наибольшее преимущество заключается в том, что это происходит при использовании tar-подобного синтаксиса . Вы можете , конечно , использовать 7z, unrar, unzipи т.д. из командной строки, но они используют различный синтаксис.
njsg

3

Самый стандартный ответ pax, который рекомендуется cpioи tar.

В отличие от cpioPOSIX tar, но, как и GNU tar, paxон умеет архивировать файлы и сжимать архив. Это поведение отличается от того zip, который сжимает каждый файл перед тем, как поместить его в архив.


1
paxПоддерживает ли zip архивы?
Морская звезда

Нет, и он не поддерживает paxархивы!
roblogic

2

Это касается только добычи.

Для этого я начал использовать dtrx.

Весь смысл в том, чтобы устранить сложность. Таким образом, вы просто передаете в него любой архив, и он выясняет, что с ним делать. Zip, tar, gz ... Использование всегда одинаково - dtrx archive.zip. Он задает несколько вопросов, и все готово.

dtrxдоступно в большинстве репозиториев, так что вы можете apt| yumустановить его.


1

Я часто пытаюсь заархивировать измененные файлы в моем рабочем каталоге - либо скопировать все измененные файлы в другой рабочий каталог песочницы, либо сохранить их ненадолго, потому что я хочу отменить некоторые изменения.

В этом случае я копирую список измененных файлов во временный файл и использую его zipс опцией -@.

Допустим, я изменил файлы Foo.h, Bar.cc и TestBar.cc.

Допустим, я создал файл с именемified-files.txt, содержимое которого:

Foo.h
Bar.cc
TestBar.cc

Я выполняю следующую команду, чтобы сжать эти файлы:

cat modified-files.txt | zip modified-files.zip -@
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.