Вместо того, чтобы использовать tar для записи на локальный диск, вы можете писать напрямую на удаленный сервер по сети, используя ssh.
server1$ tar -zc ./path | ssh server2 "cat > ~/file.tar.gz"
Любая строка, которая следует за вашей командой "ssh", будет запущена на удаленном сервере вместо интерактивного входа. Вы можете направлять ввод / вывод в и из этих удаленных команд через SSH, как если бы они были локальными. Помещение команды в кавычки позволяет избежать путаницы, особенно при использовании перенаправления.
Или вы можете извлечь файл tar непосредственно на другом сервере:
server1$ tar -zc ./path | ssh server2 "tar -zx -C /destination"
Обратите внимание на редко используемый -C
параметр. Это означает «сначала перейдите в этот каталог, прежде чем что-либо делать».
Или, возможно, вы хотите «вытащить» с сервера назначения:
server2$ tar -zx -C /destination < <(ssh server2 "tar -zc -C /srcdir ./path")
Обратите внимание, что <(cmd)
конструкция является новой для bash и не работает на старых системах. Он запускает программу и отправляет вывод в канал и подставляет этот канал в команду, как если бы это был файл.
Я мог бы просто написать вышеизложенное следующим образом:
server2$ tar -zx -C /destination -f <(ssh server2 "tar -zc -C /srcdir ./path")
Или следующим образом:
server2$ ssh server2 "tar -zc -C /srcdir ./path" | tar -zx -C /destination
Или вы можете избавить себя от горя и просто использовать rsync:
server1$ rsync -az ./path server2:/destination/
Наконец, помните, что сжатие данных перед передачей уменьшит вашу пропускную способность, но при очень быстром соединении это может фактически сделать операцию более длительной . Это связано с тем, что ваш компьютер может быть не в состоянии сжимать достаточно быстро, чтобы не отставать: если сжатие 100 МБ занимает больше времени, чем требуется для отправки 100 МБ, то быстрее отправить его без сжатия.
С другой стороны, вы можете захотеть использовать pzip для gzip самостоятельно (вместо использования опции -z), чтобы вы могли указать уровень сжатия. По моему опыту, при быстрых сетевых подключениях со сжимаемыми данными использование gzip на уровне 2 или 3 (по умолчанию 6) дает наилучшую общую пропускную способность в большинстве случаев. Вот так:
server1$ tar -c ./path | gzip -2 | ssh server2 "cat > ~/file.tar.gz"