Oprócz odpowiedzi @Lekensteyn, chciałbym dodać, że to zachowanie opiera się na Zrób jedną rzecz i zrób to dobrze filozofię - tar
program wie, jak umieścić wiele plików w jednym strumieniu (z .tar
rozszerzeniem), gzip
wie, jak skompresować pojedynczy plik (dodanie .gz
rozszerzenia) *. Łącząc te narzędzia, możesz utworzyć polecenie, które kompresuje wiele plików w jeden .tag.gz
plik.
To podejście jest bardzo elastyczne - możesz łączyć kilka standardowych poleceń Uniksa, aby wykonywać różne czynności. Na przykład, jeśli napiszesz lepszy program do kompresji plików, nie musisz go modyfikować, tar
aby umożliwić mu tworzenie .tar.mymegazip
plików - zamiast tego po prostu wysyłasz tar
dane wyjściowe do kompresora.
Podobnie, tar
nic nie wie o SSH, ale łącząc polecenia, możesz utworzyć skrypt, który archiwizuje pliki, przesyła je do zdalnego komputera za pośrednictwem SSH i tam je archiwizuje.
Porównaj to z zip
poleceniem, które nie pochodzi z Uniksa - ma wbudowane narzędzia do kompresji całych katalogów, szyfrowania plików, dzielenia archiwum na mniejsze pliki zip itp.
(przypis) - tak, tar
jest w stanie sam skompresować pliki gzip lub bzip za pomocą -z
i -j
przełączników, zostały one dodane dla wygody, a tar GNU faktycznie się spawnuje gzip
lub bzip2
jest nowym procesem.
tar c dir/ | gzip > dir.tar.gz
itar czf dir.tar.gz dir/
polecenia robią to samo. Przykład, w którymtar
łączy się ssh itar
(ponownie)tar cz Documents/ | ssh user@host 'tar xz
(równowartość rsync będzie:rsync -a Documents user@host:
)