Jak skompresować wszystkie pliki we wszystkich podkatalogach w jednym skompresowanym pliku w bash


201

Możliwa duplikat:
zgrywanie zestawu katalogów i tworzenie skompresowanego pliku tar

W tym poście opisano, jak rozpakować każdy plik osobno w strukturze katalogów. Muszę jednak zrobić coś nieco innego. Muszę utworzyć jeden duży plik gzip dla wszystkich plików w określonym katalogu. Potrzebuję też móc określić wyjściową nazwę pliku skompresowanego (np. Files.gz) i zastąpić stary plik skompresowanego pliku, jeśli taki już istnieje.


gzipze swej natury kompresuje tylko jeden plik. Aby umieścić wiele plików w jednym pliku w celu późniejszego zgzipowania, użyj tar.
— Thomas

Odpowiedzi:


387
tar -zcvf compressFileName.tar.gz folderToCompress

wszystko w folderToCompress przejdzie do nazwa_kompresu

Edycja: Po przejrzeniu i komentarzach zdałem sobie sprawę, że ludzie mogą się mylić z nazwa_pliku_pliku bez rozszerzenia. Jeśli chcesz, możesz użyć rozszerzenia .tar.gz (zgodnie z sugestią) z nazwa_kompresu


2
Dzięki. Czy to wszystko skompresuje pod „folderToCompress” (tzn. Rekurencyjnie)?
— Doug

2
wszystko w folderzeToCompress przejdzie do
— nazwa_kompresu

80
Prawdopodobnie będziesz chciał wybrać, compressFileNamewięc zawiera .tar.gzrozszerzenie lub doprowadzisz wszystkich do szaleństwa.
— zremisował

9
Działa to również dla dowolnej liczby katalogów, np. tar -zcvf two-dirs.tar.gz dir-one dir-twoUtworzy archiwum zawierające dwa katalogi.
— Zoltán

5
Działa również z *kompresowaniem wszystkiego w bieżącym tar -zcvf all.tar.gz *

61

istnieje wiele metod kompresji, które działają rekurencyjnie w wierszu poleceń i dobrze jest wiedzieć, kto jest końcowym odbiorcą.

tzn. jeśli ma zostać wysłany do kogoś z systemem Windows, prawdopodobnie najlepiej będzie zip:

zip -r file.zip folder_to_zip

unzip filenname.zip

dla innych użytkowników Linuksa lub twoja własna tar jest świetna

tar -cvzf filename.tar.gz folder

tar -cvjf filename.tar.bz2 folder  # even more compression

#change the -c to -x to above to extract

Trzeba uważać na smołę i sposób, w jaki rzeczy są smołowane / wyodrębniane, na przykład, jeśli uruchamiam

cd ~
tar -cvzf passwd.tar.gz /etc/passwd
tar: Removing leading `/' from member names
/etc/passwd


pwd

/ home / moja nazwa użytkownika

tar -xvzf passwd.tar.gz

spowoduje to utworzenie / home / myusername / etc / passwd

niepewny, czy wszystkie wersje tar to robią:

 Removing leading `/' from member names

18

Post @amitchhajer działa dla GNU tar. Jeśli ktoś znajdzie ten post i potrzebuje go do pracy w GNUsystemie NON , może to zrobić:

tar cvf - folderToCompress | gzip > compressFileName

Aby rozwinąć archiwum:

zcat compressFileName | tar xvf -

2
Oprócz tego, że jest przenośny, to rozwiązanie jest przydatne, jeśli chcesz przekazać argumenty do gzip (np. --Test lub --best), ponieważ afaik nawet GNU tar nie zapewnia sposobu wysyłania argumentów do gzip.
— Timothy Woods

Jest to wszechstronne, ponieważ można również używać innych sprężarek. Na przykład, pigzktóry jest szybszy, ponieważ może lepiej wykorzystać procesor (wielowątkowa implementacja zip).
— Ortwin Angermeier
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.