Як застебнути / розпакувати в командному рядку unix?


541

Як я можу створювати та витягувати архіви zip з командного рядка?


3
@joachim, вам слід задати питання в питанні та надати відповідь у відповіді. У відповіді на власні запитання не виникає жодних проблем, але це не є частиною самого питання, оскільки це розбиває всю перевагу громади-голосів-найкращих-відповідей. Крім того, це, мабуть, краще підходить для суперпользователя, оскільки це не пов'язано з програмуванням.

2
Де ви будете документувати, як вийти в Інтернет і перевірити так, якщо ви забули свій логін?

@ 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
Я схвалив вашу відповідь, оскільки питання полягає в тому, як поводитися з поштовими архівами, а не tar-файлами.
Морська зірка

3
@Starfish, це, безумовно, в межах ваших прав, дякую щонайменше для пояснення, чому так багато людей не витрачають часу на це :-) Я взяв "блискавку" в більш загальному сенсі (стиснення), а не конкретного формату, тому я зроблю це більш зрозумілим.

Майте на увазі, що архіви tar можуть не працювати належним чином при переміщенні між різними платформами, mac до linux чи навпаки. Zip набагато безпечніше, оскільки він працює правильно у всіх системах.
користувач1751825

Я припускаю, що технічно це gzip, тому це добре. Я вважаю. Досить очевидно, не те, про що задавали питання.
Сова

30

Якщо у вас не встановлені пакети zip та unzip, а у вас Java, ви можете jarскасувати розпакування:

jar -xf file.zip

3
Не мій сервер, ні розпакування, zip, 7z, нічого ... І це спрацювало. Дякую!
Даріуш

2
Це чудова порада.
Морські зірки

29

Що ж, якщо мова йде про розповсюдження файлів для різних операційних систем, я рекомендую 7-zip .

Зазвичай в упаковці p7zipви отримаєте команду 7zта 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]

Вам потрібно буде переконатися, що ці команди встановлені через менеджер пакунків. Це не складніше, ніж використовувати що-небудь інше в командному рядку. Це, звичайно, простіше, ніж створювати архіви з дьогтем.


Я знаю, що це стара тема, але це найкраща відповідь. Не говорить про 7z або смолу, її лаконічну та пряму до
Кайл

4

BSD Tar також може це зробити

bsdtar acf bravo.zip alfa.jpg

Або:

bsdtar xf bravo.zip

BSD tarмає перевагу в підтримці декількох додаткових форматів стиснення порівняно з GNU tarта іншими tar. Найбільша користь - це, мабуть, те, що він робить це під час використання tarсинтаксису -like . Ви можете , звичайно , використовувати 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.

Скажімо, я створюю файл під назвою modi-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.