
Я хочу сделать что-то вроде gzip файла, а затем немедленно rsync его на другой сервер, чтобы созданный gzip файл не был записан на локальном сервере. Я думал сделать что-то вроде этого... но, очевидно, это не сработает.
gzip-файл | rsync -auv другой_сервер
У кого-нибудь есть идеи по этому поводу? Или это вообще возможно?
решение1
Я обычно использую gzip и ssh следующим образом:
gzip -c файл | ssh[email protected]"cat > destination.gz"
Это отправит zip-вывод через ssh прямо в файл "destination.gz" на удаленном хосте. Если вы делаете это вручную, просто введите свой пароль ssh; если вы хотите сделать это автоматически, вам нужно будет настроить ключи ssh, примерно так:
решение2
Не принимайте это на свой счет, но из вашего вопроса и комментариев следует, что вы на самом деле не понимаете, что такое rsync.для. Он не предназначен для перемещения файлов из одного места в другое, а длясинхронизацияфайлы между двумя местами. Если вы не хотите сохранять копию на локальной машине, то вы не синхронизируетесь, и rsync — не тот инструмент, который вам нужен.
Вы пытаетесь передать файл. Для этого вы можете записать его на диск и использовать ssh, ftp, sftp, ftps и т. д., или вы можете передать его через ssh, как предложил Гленн, что является правильным ответом и единственным правильным способом сделать то, что вы хотите. Если вы беспокоитесь об использовании ресурсов (а для высокоскоростных соединений это может иметь значение), то измените шифры:
gzip -c somefile | ssh -c blowfish user@host 'cat > someotherfile'
Если вы пытаетесь что-то сделать (например, pipe to rsync), и это не работает, возможно, вы делаете это неправильно, или, возможно, вы пытаетесь сделать что-то неправильно. Это вопрос инструмента для работы, и важно не исключать, что что бы вы ни пытались сделать, для этого есть подходящий инструмент.
Понимание и сохранение в памяти назначения различных инструментов, доступных в среде UNIX, позволит вам использовать и манипулировать этой средой более эффективно. Многие инструменты имеют тонкие различия или пересекаются в функциональности, но если вы не обратите внимание на них все, вы упустите множество лучших способов выполнения задач.
решение3
В этом случае Rsync, скорее всего, не даст никаких преимуществ, поскольку отправляемый им контент будет уникальным.
Сжатие файла и отправка вывода в STDOUT достаточно просты:
gzip -c file > another-file
Если вам нужна скорость и контроль над обоими концами, то netcat практически не имеет накладных расходов.
Настройте целевой компьютер на прослушивание порта 1234.
user@bar$ nc -l -p 1234 > file.gz
Отправить, 'file.gz', на машину bar:1234
user@foo$ gzip -c file | nc bar 1234
решение4
Сочетание gzip и rsync не работает.
Если вы отправляете несжатый файл, то rsync работает, отправляя только измененные биты. Но когда вы сжимаете файл gzip, конечный файл каждый раз будет существенно отличаться. Передача его в rsync в лучшем случае даст результат, аналогичный ssh, а может быть даже хуже.
Причина, по которой сжатый файл каждый раз отличается, заключается в том, что он профилирует данные перед сжатием. Это означает, что даже небольшое изменение в файле может означать изменение в профиле, затрагивая каждый сжатый байт.