В дополнение к ответу @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:)