Jak spakować / rozpakować w linii poleceń unixa?

541

Jak mogę utworzyć i wyodrębnić archiwa zip z wiersza poleceń?

joachim
źródło
3
@joachim, powinieneś zadać pytanie w pytaniu i udzielić odpowiedzi w odpowiedzi. Nie ma problemu z udzieleniem odpowiedzi na własne pytania, ale nie jako część samego pytania, ponieważ łamie to całą społeczną zaletę SO w głosowaniu na najlepszą odpowiedź. Ponadto prawdopodobnie lepiej nadaje się to dla administratora, ponieważ nie ma związku z programowaniem.
2
Gdzie udokumentujesz, jak uzyskać dostęp do Internetu i czy sprawdzasz SO, jeśli zapomniałeś loginu?
@ rlb.usa: Pracuję w wielu różnych miejscach na wielu różnych serwerach. Używanie SA dla takiej notatki pomaga innym ludziom, tak jak ja to widzę.
joachim

Odpowiedzi:

663

Zwykle używa tarsię do tworzenia nieskompresowanego archiwum i albo gziplub bzip2skompresować tego archiwum. Odpowiednie polecenia gunzipi bunzip2mogą być użyte do rozpakowania wspomnianego archiwum, lub możesz po prostu użyć flag na tarpoleceniu, aby wykonać rozpakowanie.

Jeśli masz na myśli konkretnie format pliku Zip , możesz po prostu użyć poleceń zipi unzip.

Aby skompresować:

zip squash.zip file1 file2 file3

lub spakować katalog

zip -r squash.zip dir1

Aby zdekompresować:

unzip squash.zip

rozpakuje to w bieżącym katalogu roboczym.

Justin Ethier
źródło
72
Ja osobiście używam tylko zip -r9 archive.zip files...składni (-r = rekurencyjna -9 = maksymalna kompresja).
amfetamachina
3
Na marginesie: zipmożna tworzyć wiele różnych wersji archiwów .ZIP, a także używać wielu różnych kompresorów. Z drugiej strony istnieje wiele innych narzędzi do kompresji o podobnych nazwach: 7-Zip, gzip, bzip2, rzip itp., Których nie można zamieniać.
polemon
5
W przypadku, gdy nie chcesz uwzględniać katalogu nadrzędnego:cd dir1; zip -r ../squash.zip *
Marinos An
Jestem zdezorientowany, zrobiłem to i otrzymałem długą listę napełnień i wyciągów, ale kiedy sprawdzam katalog, jest pusty, czy zapisać oryginalny plik zip? Gdzie to wszystko zmierza?
Summer Developer
11
Dla przypomnienia użyj unzip -d myfolder squash.zipdo wyodrębnienia nowego osobnego katalogu ( myfolder) zamiast umieszczania wszystkich plików bezpośrednio w bieżącym katalogu, co może być denerwujące, jeśli plik zip zawiera wiele plików i katalogów na najwyższym poziomie. To naśladuje działanie większości narzędzi do rozpakowywania interfejsu użytkownika.
Alexander Klimetschek
64

Istnieje naprawdę ogromna liczba różnych sposobów do kompresji i dekompresji pod pochodnymi UNIX więc mam zamiar założyć, chodziło o „zip” w sensie ogólnym, a nie konkretnego formatu pliku.

Możesz skompresować pliki (w skompresowanym formacie) za pomocą tarprogramu GNU :

tar -zcvf myfile.tgz .

który wykona bieżący katalog. Zamień na .inne nazwy plików, jeśli chcesz czegoś innego.

Aby rozpakować ten plik, użyj:

tar -zxvf myfile.tgz

Zakłada się oczywiście, że masz tarmożliwość kompresji, a także łączenia plików w jeden.

Jeśli nie, możesz po prostu użyć, tar cvfa następnie gzip(ponownie, jeśli jest dostępny) do kompresji, a gunzipnastępnie tar xvf.


Do konkretnej obsługi plików w formacie ZIP polecam pobranie 7zipi użycie tego - rozpoznaje on wiele różnych formatów plików, w tym ZIP.


źródło
Lub użyj tar jcvf file.tar.bz2...do kompresji w formacie bzip2 lub tar Jcvf file.tar.xz ...do kompresji xz.
OldTimer,
4
Poparłem twoją odpowiedź, ponieważ pytanie dotyczy tego, jak postępować z archiwami zip, a nie plikami tar.
Rozgwiazda
3
@ Starfish, to z pewnością w twoich prawach, dziękuję za przynajmniej wyjaśnienie, dlaczego tak wiele osób nie ma czasu, aby to zrobić :-) Wziąłem „zip” w bardziej ogólnym znaczeniu (kompresja) niż w określonym formacie, więc wyjaśnię to bardziej.
Należy pamiętać, że archiwa tar mogą nie działać poprawnie podczas przenoszenia między różnymi platformami, Mac na Linux lub odwrotnie. Zip jest znacznie bezpieczniejszy, ponieważ działa poprawnie na wszystkich systemach.
user1751825,
Chyba technicznie jest to gzip, więc nie ma sprawy. Zgaduję. Najwyraźniej nie to, o co pytało pytanie.
Owl
30

Jeśli nie masz zainstalowanych pakietów zip i rozpakuj i masz Java, możesz użyć jardo rozpakowania:

jar -xf file.zip
mlocke
źródło
3
Nie mój serwer, bez rozpakowywania, zip, 7z, nic ... I to działało. Dzięki!
Dariusz
2
To świetna wskazówka.
Rozgwiazda
29

Cóż, jeśli chodzi o dystrybucję plików dla różnych systemów operacyjnych, polecam 7-zip .

Zwykle w pakiecie p7zipotrzymasz polecenie 7zi 7za, za pomocą którego możesz tworzyć własne archiwa 7z.

7zamoże również dekompresować standardowe archiwa zip ( pkzip ) (i tworzyć je również za pomocą -tzipprzełącznika).

Ściskanie:

7za a archive.7z file1 file2 directory/

Dekompresowanie:

7za x archive.7z

Może również tworzyć samorozpakowujące się archiwa za pomocą -sfxprzełącznika:

7za a -sfx archive.exe files1 file2 dir

Polecam tę metodę, jeśli użytkownicy systemu Windows nie mogą otworzyć archiwów 7z (na wypadek, gdybyś chciał zasugerować narzędzie do tego: PeaZip ).

Jeśli chcesz używać tego samego algorytmu kompresji ze swoimi archiwami, użyj -Jprzełącznika z tar:

tar cJf archive.tar.xz file1 file2 dir

xzUNIX jest narzędziem, które wykorzystuje LZMA2 kompresji, ale działa w ten sposób gz, bz2itp działa. Działa nawet jako filtr.

7z nie tworzy archiwów z pełną informacją o systemie plików w systemie UNIX, więc musisz użyć tarprzed użyciem 7z (ale ponieważ 7z przechowuje inne informacje o tarpliku, polecam użyć xz, ponieważ jest do tego przeznaczony):

tar cf - file1 file2 dir | 7za z -si archive.tar.7z
polemon
źródło
2
Być może powinienem dołączyć tę odpowiedź atool, jest to ładne małe narzędzie, które sprawia, że ​​korzystanie z wielu różnych sprężarek jest wygodniejsze. Zwróć uwagę, że atworzenie i tworzenie archiwum staje się a arc.7z folder/lub wypakowywanie prostegoa arc.7z
polemon
21
unzip <filename>

i

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

Musisz upewnić się, że te polecenia są zainstalowane za pośrednictwem menedżera pakietów. Nie jest to trudniejsze niż użycie czegokolwiek innego w wierszu poleceń. Jest to z pewnością prostsze niż tworzenie archiwów za pomocą tar.

Rozgwiazda
źródło
Wiem, że to stary wątek, ale to najlepsza odpowiedź. Nie mówi o 7z ani smole, jest zwięzły i od razu do rzeczy
Kyle
4

BSD Tar może to również zrobić

bsdtar acf bravo.zip alfa.jpg

Lub:

bsdtar xf bravo.zip
Steven Penny
źródło
BSD tarma tę zaletę, że obsługuje całkiem sporo dodatkowych formatów kompresji w porównaniu do GNU tari innych tar. Największą korzyścią jest być może to, że robi to przy użyciu tarskładni podobnej do podobnej . Można oczywiście użyć 7z, unrar, unzipitp z linii poleceń, ale oni użyć innego składnię.
njsg
3

Najbardziej standardową odpowiedzią jest pax, która jest zalecana ponad cpioi tar.

W przeciwieństwie cpiodo POSIX tar, ale podobnie jak GNU tar, paxjest w stanie archiwizować pliki i kompresować archiwum. To zachowanie różni się od tego zip, że kompresuje każdy plik przed umieszczeniem go w archiwum.

mouviciel
źródło
1
Czy paxobsługuje archiwa zip?
Rozgwiazda
Nie, nie obsługuje też paxarchiwów!
roblogic
2

Dotyczy to tylko ekstrakcji.

Do tego zacząłem używać dtrx.

Chodzi o to, aby usunąć złożoność. Po prostu przekazujesz do niego dowolne archiwum, które pokazuje, co należy z tym zrobić. Zip, tar, gz ... Użycie jest zawsze takie samo - dtrx archive.zip. Zadaje kilka pytań i gotowe.

dtrxjest dostępny w większości repozytoriów, więc możesz apt| yumZainstaluj to.

JackLeo
źródło
1

Często próbuję spakować zmodyfikowane pliki w moim katalogu roboczym - albo skopiować wszystkie zmodyfikowane pliki do innego katalogu roboczego piaskownicy, albo zachować je na krótki czas, ponieważ chcę cofnąć niektóre zmiany.

W takim przypadku kopiuję listę zmodyfikowanych plików do pliku tymczasowego i używam zipz tą opcją -@.

Powiedzmy, że zmodyfikowałem pliki Foo.h, Bar.cc i TestBar.cc.

Załóżmy, że tworzę plik o nazwie Modified-files.txt, którego zawartość to:

Foo.h
Bar.cc
TestBar.cc

Wykonuję następujące polecenie, aby spakować te pliki:

cat modified-files.txt | zip modified-files.zip -@
R Sahu
źródło