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.