To dziwne, że nikt inny nie wspomniał, że współczesne wersje GNU tar
pozwalają na kompresowanie podczas pakowania:
tar -czf output.tar.gz directory1 ...
tar -cjf output.tar.bz2 directory2 ...
Możesz także użyć wybranego kompresora, pod warunkiem, że obsługuje on opcje ' -c
' (do stdout lub ze stdin) i ' -d
' (decompress):
tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...
Umożliwiłoby to określenie dowolnej alternatywnej sprężarki.
[ Dodano : Jeśli wyodrębniasz z gzip
lub bzip2
skompresowane pliki, GNU tar
automatycznie je wykrywa i uruchamia odpowiedni program. Oznacza to, że możesz użyć:
tar -xf output.tar.gz
tar -xf output.tgz # A synonym for the .tar.gz extension
tar -xf output.tar.bz2
i będą one obsługiwane prawidłowo. Jeśli używasz niestandardowego kompresora, musisz to określić podczas wyodrębniania.]
Przyczyną separacji jest, podobnie jak w wybranej odpowiedzi, rozdzielenie obowiązków. Oznacza to między innymi, że ludzie mogli używać programu ' cpio
' do pakowania plików (zamiast tar
), a następnie używać wybranego kompresora (kiedyś preferowany był kompresor pack
, później był compress
(który był znacznie bardziej efektywny niż pack
), a następnie gzip
który krążył wokół obu swoich poprzedników i jest całkowicie konkurencyjny zip
(który został przeniesiony na Uniksa, ale nie jest tam natywny), a teraz bzip2
, z mojego doświadczenia, ma zwykle 10-20% przewagę gzip
.
[ Dodano : ktoś zauważył w swojej odpowiedzi, że cpio
ma zabawne konwencje. To prawda, ale dopóki GNU tar
nie otrzymało odpowiednich opcji (' -T -
'), cpio
było lepszym poleceniem, gdy nie chciałeś archiwizować wszystkiego, co znajdowało się pod danym katalogiem - tak naprawdę można było wybrać dokładnie, które pliki były archiwizowane. Wadą cpio
było to, że nie tylko można było wybierać pliki - trzeba było je wybierać. Wciąż jest jedno miejsce, gdzie cpio
wyniki; może wykonać kopię in-situ z jednej hierarchii katalogów do innej bez pośredniej pamięci:
cd /old/location; find . -depth -print | cpio -pvdumB /new/place
Nawiasem mówiąc, -depth
opcja „ ” włączona find
jest ważna w tym kontekście - kopiuje zawartość katalogów przed ustawieniem uprawnień do samych katalogów. Kiedy sprawdziłem polecenie przed wprowadzeniem dodatku do tej odpowiedzi, skopiowałem kilka katalogów tylko do odczytu (uprawnienia 555); kiedy poszedłem usunąć kopię, musiałem złagodzić uprawnienia do katalogów, zanim „ rm -fr /new/place
” mogłem zakończyć. Bez tej -depth
opcji cpio
polecenie nie powiodłoby się. Przypomniałem sobie to dopiero, gdy poszedłem na sprzątanie - przytoczona formuła jest dla mnie taka automatyczna (głównie z powodu wielu powtórzeń przez wiele lat). ]