To dziwne, że nikt inny nie wspomniał, że współczesne wersje GNU tarpozwalają 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 gziplub bzip2skompresowane pliki, GNU tarautomatycznie 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 gzipktó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 cpioma zabawne konwencje. To prawda, ale dopóki GNU tarnie otrzymało odpowiednich opcji (' -T -'), cpiobył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ą cpiobyło to, że nie tylko można było wybierać pliki - trzeba było je wybierać. Wciąż jest jedno miejsce, gdzie cpiowyniki; 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, -depthopcja „ ” włączona findjest 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 -depthopcji cpiopolecenie 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). ]