В дополнение к ответу @Lekensteyn, я хотел бы добавить, что это поведение основано на философии « Делай одно и делай это хорошо» - tar
программа знает, как поместить несколько файлов в один поток (с .tar
расширением), gzip
знает, как сжать один файл (с добавлением .gz
расширения) *. Комбинируя эти инструменты, вы можете создать команду, которая сжимает несколько файлов в один.tag.gz
файл.
Этот подход очень гибок - вы можете комбинировать несколько стандартных команд Unix для выполнения самых разных задач. Например, если вы пишете лучшую программу для сжатия файлов, вам не нужно изменять tar
ее, чтобы она могла создавать .tar.mymegazip
файлы - вместо этого вы просто передаете tar
выходные данные в ваш компрессор.
Так же, tar
ничего не знает о SSH, но, комбинируя команды, вы можете создать скрипт, который архивирует файлы, загружает их на удаленный компьютер через SSH и разархивирует их там.
Сравните это с zip
командой, которая не была создана в Unix - она имеет встроенные инструменты для сжатия целых каталогов, шифрования файлов, разделения архива на более мелкие zip-файлы и т. Д.
(сноска) - да, tar
он может сам gzip или bzip файлы, используя -z
и -j
переключатели, они были добавлены для удобства, и GNU tar фактически создается gzip
или bzip2
как новый процесс.
tar c dir/ | gzip > dir.tar.gz
иtar czf dir.tar.gz dir/
команды делают то же самое. Пример , в которомtar
сочетается с SSH иtar
(снова):tar cz Documents/ | ssh user@host 'tar xz
(Rsync будет эквивалентно:rsync -a Documents user@host:
)