Kopiowanie plików przy użyciu rsync ze zdalnego serwera na komputer lokalny

318

Po ssh'owaniu na zdalnym serwerze, jakie byłoby polecenie skopiowania wszystkich plików z katalogu do katalogu lokalnego na moim komputerze?

markstewie
źródło
4
Ponieważ możesz rsyncbezpośrednio z lokalnego komputera.
Johnsyweb
2
Och ... tak, mogę. Widzę teraz inne odpowiedzi. Dzięki.
markstewie
17
Jest to wspólne zadanie dla rozwoju (sieci) z dobrą odpowiedzią. Nie rozumiem, dlaczego wciąż jest zamknięty.
d.raev,
6
Myślę, że @ d.raev miał na myśli to, że pytanie zostało zamknięte jako nie na temat (jeśli dobrze pamiętam, oflagowałem migrację tego pytania do SuperUser, gdzie myślę, że pasuje lepiej), niż że nie było żadnej zaakceptowanej odpowiedzi . Mimo to ... miło było zaakceptować moją odpowiedź po tak długim czasie. :-)
Johnsyweb,
3
@ markstewie żadnych złych uczuć, to dobre pytanie i pomogło mi (wydaje się, że wiele innych też), ale to „zamknięte” sprawia, że ​​nie wygląda na godne zaufania, więc postanowiłem zwrócić na to uwagę.
d.raev

Odpowiedzi:

575

Z lokalnego komputera:

rsync -chavzP --stats [email protected]:/path/to/copy /path/to/local/storage

Z lokalnego komputera z niestandardowym portem ssh:

rsync -chavzP -e "ssh -p $portNumber" [email protected]:/path/to/copy /local/path

Lub ze zdalnego hosta, zakładając, że naprawdę chcesz pracować w ten sposób, a lokalny komputer nasłuchuje na SSH:

rsync -chavzP --stats /path/to/copy [email protected]:/path/to/local/storage

Zobacz man rsyncwyjaśnienie moich zwykłych przełączników.

Johnsyweb
źródło
255
Wyjaśnienie polecenia: wyjaśniahell.com/...
wołowina
118
Wow, ta strona z objaśnieniami jest niesamowita.
gosukiwi
2
@cmcdragonkai: w rzeczy samej, lokalny host musi mieć uruchomiony serwer ssh i być dostępny dla zdalnego hosta. To jeden z powodów, dla których wolę pierwsze rozwiązanie od drugiego.
Johnsyweb
16
Zachowaj ostrożność podczas rsynchronizacji z końcowymi ukośnikami. Polecenie wydane przez Johnnysweb utworzy katalog o nazwie copy wewnątrz /path/to/local/storage. Podoba mi się /path/to/local/storage/copy. Jeśli tego właśnie chcesz świetnie. Jednak częstszym scenariuszem jest skopiowanie zawartości katalogu zdalnego do katalogu lokalnego. Następnie zrobiłbyś to, /path/to/copy/co umieściłoby zawartość w katalogu /path/to/local/storagebez tworzenia lokalnego katalogu kopii.
rozdział
16
Przyszedłem tutaj po komendę rsync i wyszedłem z wyjaśniahell.com . Dzięki @beefsack!
Cyphase
50

Jeśli masz dostęp do SSH, nie musisz najpierw SSH, a następnie kopiować, wystarczy użyć Bezpiecznego kopiowania (SCP) z miejsca docelowego.

scp user@host:/path/file /localpath/file

Obsługiwane są znaki wieloznaczne, więc

scp user@host:/path/folder/* /localpath/folder

skopiuje wszystkie zdalne pliki z tego folderu. jeśli skopiujesz więcej niż jeden katalog.

Uwaga -r skopiuje również wszystkie podfoldery i zawartość.

Tezyn
źródło
6
Dlaczego używać scpzamiast rsync? Uważaj również, aby twoja powłoka nie próbowała się rozszerzać user@host:/path/folder/*, być może używając pojedynczych cudzysłowów ( ').
Johnsyweb
Uważam, że scp jest łatwiejszy w użyciu z miejsca docelowego .... Zasadniczo jest to kopiowanie plików przez ssh, ale bez konieczności wcześniejszego ustanowienia połączenia ssh.
Tezyn
8
Wiem, co to scpjest, to nie było moje pytanie. Dlaczego nie używałeś rsync? O to właśnie pyta pytanie, nie wymaga ustalonej sesji SSH i jest często szybsze i bardziej wydajne niż scp.
Johnsyweb,
26
Pamiętaj, że scp podąża za dowiązaniami symbolicznymi zamiast je kopiować. Może to prowadzić do kopiowania więcej niż się spodziewasz i utraty dowiązań symbolicznych (stają się normalnymi folderami / plikami).
Poniedziałek
2
Odpowiedź Mondane'a jest właśnie powodem, dla którego znalazłem ten post. Zwykle używam scp do wszystkiego, ale musiałem zachować uprawnienia i dowiązanie symboliczne między serwerami. Również różnica prędkości (bc moja nowicjuszka zdecydowanie zorientowana jako pierwsza) była ogromna.
kyle