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