6

У меня есть доступ к серверу резервного копирования по протоколу rsync (только rsync, больше ничего). Теперь я хочу получить оттуда файл (который является .tar.gz) и передать его непосредственно команде tar без сохранения архива в локальной файловой системе.

Чтобы визуализировать, с доступом по SSH я мог бы:

ssh remote_host cat backup.file.tar.gz | tar xzf -

И я получу несжатое резервное копирование локально, без фактического хранения .tar.gz на локальной машине.

Достигается ли это при использовании rsync?

4 ответа4

3

Обычно вы можете просто использовать именованный канал, например, так:

mkfifo mypipe
tar xzf mypipe &
rsync --inplace server:/remote/file.tar.gz mypipe

Тем не менее, rsync слишком умен для собственного блага, так как он распознает, что удаленный файл - это обычный файл, а локальный - канал. Таким образом, он сначала удаляет канал, а затем передает удаленный файл. scp такой проблемы нет, и она с радостью отправит данные в именованный канал (к сожалению, здесь это вам не поможет).

1

Короче говоря, вы не можете. rsync работает, общаясь между двумя экземплярами rsync (на стороне клиента и сервера), чтобы выяснить различия. tar не умеет говорить на rsyncish.

0

Я так не думаю, но вы можете использовать scp:

scp file /dev/stdout

скопирует файл в стандартный вывод. Вы можете добавить необходимую информацию об удаленном пользователе и хосте для источника файла в аргументы командной строки scp .

-1

rsync может только протокол rsh или ssh. Если вы не используете ssh, он должен использовать rsh. Просто замените ssh командой rsh:

rsh remote_host cat backup.file.tar.gz | tar xzf -

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .