Bagaimana cara zip / unzip pada baris perintah unix?

540

Bagaimana saya bisa membuat dan mengekstrak arsip zip dari baris perintah?

joachim
sumber
3
@ Joachim, Anda harus mengajukan pertanyaan dalam pertanyaan dan memberikan jawaban dalam jawaban. Tidak ada masalah dengan menjawab pertanyaan Anda sendiri, tetapi tidak sebagai bagian dari pertanyaan itu sendiri, karena hal itu meruntuhkan seluruh keuntungan SO sebagai jawaban masyarakat. Selain itu, ini mungkin lebih cocok untuk superuser karena tidak terkait pemrograman.
2
Di mana Anda akan mendokumentasikan cara online dan memeriksa SO jika Anda lupa login Anda?
@ rlb.usa: Saya bekerja di banyak tempat berbeda di banyak server berbeda. Menggunakan SA untuk catatan seperti ini membantu orang lain juga, seperti yang saya lihat.
joachim

Jawaban:

663

Biasanya orang menggunakan taruntuk membuat arsip yang tidak terkompresi dan salah satu gzipatau bzip2untuk mengompresi arsip itu. Perintah yang sesuai gunzipdan bunzip2dapat digunakan untuk mengompres arsip tersebut, atau Anda bisa menggunakan flag pada tarperintah untuk melakukan uncompression.

Jika Anda merujuk secara khusus ke format file Zip , Anda cukup menggunakan perintah zipdan unzip.

Untuk kompres:

zip squash.zip file1 file2 file3

atau untuk zip direktori

zip -r squash.zip dir1

Untuk membuka kompresi:

unzip squash.zip

ini membuka ritsletingnya di direktori kerja Anda saat ini.

Justin Ethier
sumber
72
Saya pribadi hanya pernah menggunakan zip -r9 archive.zip files...sintaks (-r = rekursif -9 = kompresi maks).
amphetamachine
3
Sama seperti catatan tambahan: zipdapat membuat berbagai rasa arsip .ZIP, serta menggunakan banyak kompresor yang berbeda. Di sisi lain, ada sejumlah alat kompresi lain yang bernama serupa: 7-Zip, gzip, bzip2, rzip, dll. Yang tidak dapat dipertukarkan.
polemon
5
Jika Anda tidak ingin direktori induk dimasukkan:cd dir1; zip -r ../squash.zip *
Marinos An
Saya bingung, saya melakukan ini dan mendapatkan daftar panjang inflasi dan ekstraksi tetapi ketika saya memeriksa direktori itu kosong, simpan untuk file zip asli? Kemana perginya semua?
Pengembang Musim Panas
11
Sebagai catatan, gunakan unzip -d myfolder squash.zipuntuk mengekstrak ke direktori baru yang terpisah ( myfolder) alih-alih menempatkan semua file langsung ke direktori saat ini, yang dapat mengganggu jika file zip berisi banyak file dan direktori di tingkat atas. Ini meniru cara sebagian besar alat unzip UI bekerja.
Alexander Klimetschek
64

Ada banyak sekali cara berbeda untuk mengompresi dan mengompres di bawah turunan UNIX jadi saya akan menganggap Anda berarti "zip" dalam arti umum daripada format file tertentu .

Anda dapat menyalin file (dalam format terkompresi) dengan tarprogram GNU :

tar -zcvf myfile.tgz .

yang akan melakukan direktori saat ini. Ganti .dengan nama file lain jika Anda menginginkan sesuatu yang lain.

Untuk membuka zip file itu, gunakan:

tar -zxvf myfile.tgz

Itu tentu saja dengan asumsi bahwa Anda memiliki tarkemampuan melakukan kompresi serta menggabungkan file menjadi satu.

Jika tidak, Anda bisa menggunakan tar cvfdiikuti oleh gzip(lagi, jika tersedia) untuk kompresi dan gunzipdiikuti oleh tar xvf.


Untuk penanganan spesifik format file ZIP, saya akan merekomendasikan download 7zipdan menggunakan itu - itu mengakui besar berbagai format file, termasuk satu ZIP.


sumber
Atau gunakan tar jcvf file.tar.bz2...untuk kompres dalam format bzip2 atau tar Jcvf file.tar.xz ...untuk kompresi xz.
OldTimer
4
Saya menurunkan jawaban Anda karena pertanyaannya adalah tentang bagaimana menangani arsip zip, bukan file tar.
Starfish
3
@ Starfish, itu tentu saja dalam hak Anda, terima kasih untuk setidaknya menjelaskan mengapa, begitu banyak orang tidak meluangkan waktu untuk melakukan itu :-) Saya mengambil "zip" dalam arti yang lebih umum (kompresi) daripada format tertentu, jadi saya akan membuatnya lebih jelas.
Ketahuilah bahwa arsip tar mungkin tidak berfungsi dengan benar saat berpindah di antara berbagai platform, mac ke linux atau sebaliknya. Zip jauh lebih aman, karena berfungsi dengan benar di semua sistem.
user1751825
Saya kira secara teknis ini adalah gzip, jadi tidak masalah. Saya kira. Cukup jelas bukan pertanyaan yang ditanyakan.
Burung hantu
30

Jika Anda tidak menginstal paket zip dan unzip dan Anda memiliki java, Anda dapat menggunakannya jaruntuk unzip:

jar -xf file.zip
mlocke
sumber
3
Bukan server saya, tidak ada unzip, zip, 7z, tidak ada ... Dan ini berhasil. Terima kasih!
Dariusz
2
Ini tip yang bagus.
Starfish
29

Nah, ketika datang untuk mendistribusikan file untuk berbagai sistem operasi, saya akan merekomendasikan 7-zip .

Biasanya dalam paket p7zip, Anda akan mendapatkan perintah 7zdan 7za, dengan mana Anda dapat membuat arsip 7z Anda sendiri.

7zajuga dapat mendekompresi arsip zip standar ( pkzip ) (dan membuatnya juga dengan -tzipsakelar).

Mengkompresi:

7za a archive.7z file1 file2 directory/

Dekompresi:

7za x archive.7z

Itu juga dapat membuat arsip yang mengekstraksi sendiri dengan -sfxsakelar:

7za a -sfx archive.exe files1 file2 dir

Saya merekomendasikan metode ini jika pengguna Windows tidak dapat membuka arsip 7z (jika Anda ingin memberi saran alat untuk itu: PeaZip ).

Jika Anda ingin menggunakan algoritma kompresi yang sama dengan tarball Anda, gunakan -Jsakelar dengan tar:

tar cJf archive.tar.xz file1 file2 dir

xzadalah alat UNIX, yang menggunakan LZMA2 untuk kompresi, tetapi bekerja jalan gz, bz2, dll bekerja. Bahkan berfungsi sebagai filter.

7z tidak membuat arsip dengan informasi sistem file lengkap di UNIX, jadi Anda harus menggunakan tarsebelum menggunakan 7z (tapi karena 7z menyimpan informasi lain tentang tarfile, saya sarankan menggunakan xz, karena dirancang untuk itu):

tar cf - file1 file2 dir | 7za z -si archive.tar.7z
polemon
sumber
2
Saya mungkin harus menambahkan jawaban ini dengan atool, ini adalah alat kecil yang bagus yang membuat menggunakan banyak kompresor berbeda menjadi lebih nyaman. Mengikat bahwa untuk adan menciptakan sebuah arsip menjadi a arc.7z folder/atau penggalian sederhanaa arc.7z
polemon
21
unzip <filename>

dan

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

Anda harus memastikan bahwa perintah-perintah ini diinstal melalui manajer paket Anda. Ini tidak lebih sulit daripada menggunakan apa pun di baris perintah. Ini tentu saja lebih sederhana daripada membuat arsip dengan tar.

Bintang laut
sumber
Saya tahu ini adalah utas lama tetapi ini adalah jawaban terbaik. Tidak berbicara tentang 7z atau tar, ringkas dan langsung ke intinya
Kyle
4

BSD Tar juga dapat melakukan ini

bsdtar acf bravo.zip alfa.jpg

Atau:

bsdtar xf bravo.zip
Steven Penny
sumber
BSD tarmemiliki manfaat mendukung beberapa format kompresi tambahan dibandingkan dengan GNU tardan lainnya tar. Manfaat terbesar adalah, mungkin, bahwa ia melakukannya saat menggunakan tarsintaks seperti . Anda pasti bisa menggunakan 7z, unrar, unzip, dll dari commandline, tetapi mereka menggunakan berbeda sintaks.
njsg
3

Jawaban paling standar adalah pax, yang direkomendasikan lebih dari cpiodan tar.

Tidak seperti cpiodan POSIX tar, tetapi seperti GNU tar, paxdapat mengarsipkan file dan mengompresi arsip. Perilaku ini berbeda dari zip, yang memampatkan setiap file sebelum memasukkannya ke dalam arsip.

mouviciel
sumber
1
Apakah paxmendukung arsip zip?
Starfish
Tidak dan juga tidak mendukung paxarsip!
roblogic
2

Ini hanya mencakup ekstraksi.

Untuk itu, saya sudah mulai menggunakannya dtrx.

Intinya adalah untuk menghapus kompleksitas. Jadi, Anda hanya membagikan arsip apa pun ke sana dan mencari tahu apa yang harus dilakukan dengannya. Zip, tar, gz ... Penggunaan selalu sama - dtrx archive.zip. Itu mengajukan beberapa pertanyaan dan Anda selesai.

dtrxtersedia di sebagian besar repositori, jadi Anda dapat apt| yumpasang itu.

Jackeo
sumber
1

Saya sering menemukan diri saya mencoba zip file yang dimodifikasi di direktori kerja saya - baik untuk menyalin semua file yang dimodifikasi ke direktori kerja kotak pasir lain atau untuk melestarikannya untuk sementara waktu karena saya ingin membatalkan beberapa perubahan.

Dalam hal ini, saya menyalin daftar file yang diubah ke file sementara dan digunakan zipdengan opsi -@.

Katakanlah saya memodifikasi file Foo.h, Bar.cc, dan TestBar.cc.

Katakanlah saya membuat file bernama modified-files.txt yang isinya:

Foo.h
Bar.cc
TestBar.cc

Saya menjalankan perintah berikut untuk zip file-file itu:

cat modified-files.txt | zip modified-files.zip -@
R Sahu
sumber