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?

linux  shell  rsync  tar  pipe 

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).


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”.


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.


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 -


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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.