Копіювання файлів за допомогою rsync з віддаленого сервера на локальну машину


318

Як тільки я ssh'd на свій віддалений сервер, що було б командою скопіювати всі файли з каталогу в локальний каталог на моїй машині?


4
Тому що ви можете rsyncбезпосередньо зі своєї локальної машини.
Johnsyweb

2
О ... так, я можу. Зараз я бачу інші відповіді. Дякую.
markstewie

17
Це звичайне завдання для (веб) розробки з хорошою відповіддю. Я не бачу, чому це все ще закрито.
d.raev

6
Я думаю, що @ d.raev мав на увазі той факт, що питання було закрито як поза темою (якщо я добре пам’ятаю, я позначав, щоб це питання було перенесено на SuperUser, де я вважаю, що воно краще підходить), а не на те, що прийнятої відповіді не було . Але все-таки ... приємно було прийняти мою відповідь після всього цього часу. :-)
Johnsyweb

3
@marktewie немає поганих почуттів, це гарне питання, і це допомогло мені (здається, багато інших теж), але це "закрито" зробило це, щоб виглядати не довірою гідно, тому я виграв, щоб привернути до нього деяку увагу.
д.раєв

Відповіді:


575

З вашої місцевої машини:

rsync -chavzP --stats user@remote.host:/path/to/copy /path/to/local/storage

З вашої локальної машини з нестандартним портом ssh:

rsync -chavzP -e "ssh -p $portNumber" user@remote.host:/path/to/copy /local/path

Або від віддаленого хоста, якщо припустити, що ви дійсно хочете працювати таким чином, і ваша локальна машина слухає SSH:

rsync -chavzP --stats /path/to/copy user@host.remoted.from:/path/to/local/storage

Дивіться man rsyncпояснення моїх звичних перемикачів.


255
Пояснення команди: explainshell.com / ...
beefsack

118
Нічого собі, що роз'яснює сайт із сайтів - це приголомшливо.
gosukiwi

2
@cmcdragonkai: дійсно, локальний хост повинен запускати ssh-сервер і бути доступним віддаленому хосту. Це одна з причин того, що я віддаю перевагу першому рішенню над другому.
Johnsyweb

16
Будьте обережні, коли rsyncing з кінцевими косою рисою. Команда, надана Johnnysweb, створить каталог, який називається копія всередині /path/to/local/storage. Як так /path/to/local/storage/copy. Якщо це те, що ви хочете чудово. Однак більш поширеним сценарієм є те, що ви хочете скопіювати вміст віддаленого каталогу в каталог у вашому локальному регіоні. Тоді ви зробите те, /path/to/copy/що розмістило б вміст всередині каталогу, /path/to/local/storageне створюючи локальний каталог копій.
голова

16
Я приїхав сюди за командою rsync, і я пішов з тлумаченням . Дякую @beefsack!
Кіфаза

50

Якщо у вас є доступ до SSH, вам не потрібно спочатку SSH, а потім скопіювати, просто скористайтеся захищеною копією (SCP) із пункту призначення.

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

Підтримувані символи картки підтримуються, так

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

скопіює всі віддалені файли у цю папку. Якщо скопіювати більше одного каталогу.

Примітка -r також копіює всі підпапки та вміст.


6
Навіщо використовувати, scpа не rsync? Також слідкуйте, щоб ваша оболонка не намагалася розширитись user@host:/path/folder/*, можливо, використовуючи одинарні лапки ( ').
Johnsyweb

Я вважаю, що scp простіше використовувати з пункту призначення .... По суті, це копія файлів через ssh, але з тим, що потрібно спочатку встановити з'єднання ssh.
Тезин

8
Я знаю, що scpтаке, це не було моїм питанням. Чому ти не користувався rsync? Це те, про що задається питання, не вимагає встановленого сеансу SSH і часто швидше і ефективніше, ніж scp.
Johnsyweb

26
Пам'ятайте, що scp виконує наступні посилання, а не копіювати їх. Це може призвести до копіювання більше, ніж ви очікуєте, і до втрати символьних посилань (вони стають звичайними папками / файлами).
Mondane

2
Відповідь Мондана є саме причиною того, що я знайшов цю посаду. Зазвичай я використовую scp для всього, але мені потрібно було зберегти дозволи та симпосилання з сервера на сервер. Крім того, різниця в швидкості (bc мій новачок я, безумовно, першочерговий перший) була величезною.
Кайл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.