Rsync na stdout?

6

Mam dostęp do serwera kopii zapasowych za pomocą protokołu rsync (tylko rsync, nic więcej). Teraz chcę pobrać plik stamtąd (który jest .tar.gz) i przekazać go bezpośrednio do polecenia tar, bez zapisywania archiwum w lokalnym systemie plików.

Aby wizualizować, z dostępem ssh mogłem:

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

I otrzymam nieskompresowaną kopię zapasową lokalnie, bez faktycznego przechowywania .tar.gz na lokalnym komputerze.

Czy można osiągnąć przy użyciu rsync?


źródło

Odpowiedzi:

3

Normalnie możesz użyć nazwanego potoku, tak jak poniżej:

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

Jednak rsync jest zbyt sprytny dla własnego dobra, ponieważ rozpoznaje, że zdalny plik jest normalnym plikiem, a lokalny jest potokiem. Najpierw usuwa potok, a następnie przesyła zdalny plik. scp nie ma tego problemu i chętnie prześle dane do nazwanego potoku (niestety to nie pomaga tutaj).

Brian
źródło
Znacznik odpowiedzi. @ user7385
macetw
1

aby to skrócić: nie możesz. rsync działa, rozmawiając między 2 instancjami rsync (po stronie klienta i serwera), aby poznać różnice. tar nie jest w stanie mówić „rsyncish”.

akira
źródło
ale jeden z klientów mógłby (teoretycznie) napisać coś do potoku zamiast do pliku.
3
Protokół rsync wymaga komunikacji dwukierunkowej - pełnego dupleksu na jednym kanale. Nie jest to możliwe w przypadku rur, są one tylko proste. Wszystko, co rsync kiedykolwiek wysyła na stdout, to informacja o statusie.
David Spillett
Nie wiem, co protokół rsync ma wspólnego z wyjściem. Nie mówię o zamianie rsync na tar. Mówię o zapisaniu pliku klienta rsync (na przykład pobranego z opcją --whole-file, aby zapobiec wyszukiwaniu i sprawdzaniu sum kontrolnych) do potoku, a nie do pliku.
0

Nie sądzę, ale możesz użyć scp:

scp file /dev/stdout

skopiuje plik na standardowe wyjście. Możesz dodać niezbędne informacje o zdalnym użytkowniku i hoście dla źródła pliku do argumentów wiersza poleceń scp.

Dennis Williamson
źródło
Jak wspomniałem: nie mam ssh / scp. Tylko dostęp rsync.
2
@depesz: Przepraszam, nie widzę, gdzie o tym wspomniałeś.
Dennis Williamson
„Mam dostęp do serwera kopii zapasowych za pomocą protokołu rsync”. Ssh nie wspomniał o dostępie, ponieważ go nie mam. Nie wspomniałem też o innych protokołach - mam tylko rsync.
-1

rsync może zawierać tylko protokół rsh lub ssh. Jeśli nie używasz ssh, musi używać rsh. Po prostu zastąp ssh poleceniem rsh:

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

TD1
źródło
1
rsync może tylko protokół rsync. Mówi to przez dowolną możliwą kanał.
akira
@akira, W trybie demona, tak, zapomniałem, że nasłuchuje portu 873. Może być również skonfigurowany do używania rsh lub ssh bez uruchamiania demona.
TD1
1
@ Tim Deichelbohrer: nie, zawsze. jeśli działa przez ssh, „demon” (lepszy „nadawca”) jest uruchamiany na żądanie i rozmawia z klientem przez stdin / stdout. czytać samba.anu.edu.au/rsync/how-rsync-works.html „Uruchom proces”
akira
@Tim: Nie mam dostępu do rsh / ssh - jak już powiedziałem - mam tylko dostęp rsync.
@akira: rsync nie wymaga rsh / ssh. Ma swój własny serwer tcp / ip.