Відповіді:
Так, використовуйте -r
:
scp -rp sourcedirectory user@dest:/path
Примітка. Це створює sourcedirectory
внутрішню частину, /path
таким чином файли будуть знаходитись/path/sourcedirectory
-pr
(параметри у зворотному порядку) не копіюють папки, а записують їх вміст у цільовий каталог (мабуть, порядок параметрів має значення).
Хоча попередні відповіді технічно правильні, вам слід також розглянути можливість використання rsync
. rsync
порівнює дані на стороні, що надсилає та приймає, з розрізним механізмом, тому не потрібно повторно надсилати раніше надіслані дані.
Якщо ви збираєтесь скопіювати щось на віддалену машину не один раз, використовуйте rsync
. Насправді це добре використовувати rsync
щоразу, оскільки в ньому є більше елементів керування для таких речей, як копіювання дозволів і прав власності на файли та виключення певних файлів чи каталогів. Загалом:
$ rsync -av /local/dir/ server:/remote/dir/
синхронізує локальний каталог із віддаленим каталогом. Якщо запустити його вдруге, і вміст локальної каталогі не змінився, дані не передаватимуться - набагато ефективніше, ніж scp
кожен раз виконувати та копіювати все.
Також rsync
дозволяє відновити після перерваних переказів дуже легко, на відміну від scp
.
Нарешті, сучасні версії rsync
за замовчуванням працюють над ssh, тому, якщо scp
вона вже працює, rsync
це в значній мірі повинно бути заміною.
rsync
це більш ефективно. Одне, що він зараз не scp
робить, це дозволити копіювання між віддаленими хостами (принаймні, без запуску клієнта rsync на одному з них).
-av
: v - для багатослівного, для архіву і - це ярлик до -rlptgoD, що передбачає рекурсивні, збереження дат і посилань власника прав. Якщо ви хочете лише використовувати рекурсивне використання-r
Саме для цього є -r
варіант. :)
Для отримання додаткової інформації див. Сторінку "scp man" .
Рекурсивний варіант копіювання '-r' (нижній регістр)
scp -r
Що я плутаю з звичайною локальною рекурсивною опцією копіювання '-R' (верхній регістр)
cp -R
Найкращий спосіб - використовувати rsync через SSH
rsync -a -essh /source/ user@dest-server:/dest/
rsync -a -essh user@source-server:/source/ /dest/
Мої улюблені варіанти -Pazvessh --delete:
rsync
які я використав, використовували б ssh
за замовчуванням, тому -essh
навряд чи знадобляться. І вибір команди, яка використовується для підключення до віддаленого хоста, насправді не пов'язаний з рекурсивним копіюванням.
Шукаючи прапор рекурсивної копії та успішно використовуючи його завдяки цій публікації, я хотів би опублікувати лише пропозицію.
Якщо справа в тому, що ви копіюєте (рекурсивно) каталог. Можливо, якщо файли надсилаються стислі, ви могли б заощадити час на передачі
Що я зробив у підсумку:
local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz
Сподіваюсь, це допомагає
.tar.gz
або .tgz
оскільки файл є архівом gzipped tar (оскільки -z
прапор використовується).
Ви можете рекурсивно скопіювати каталог у стислий архів за допомогою цієї простої команди:
ssh -p 22 user@address-to-copy-from.com 'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz
Наприклад, щоб скопіювати вміст /var/log
з domain.com
в ~/logs.tgz
запуску:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' > ~/logs.tgz
Ви також можете витягувати файли в цільовій системі за допомогою труб. Ця команда буде копіювати вміст в /var/log
на domain.com
до ~/destination/log
вашої системи:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' | tar xzf - -C ~/destination
Хоча для дзеркального відображення каталогу, напевно, ви повинні використовувати rsync
...
Якщо ви віддаєте перевагу передавати пароль користувача як параметр, а не вводити його інтерактивно, ви можете використовувати sshpass
( sudo apt-get install -y sshpass
).
Приклад:
sshpass -p 'remote_password' scp -rp /src/folder myremoteusername@122.10.12.123:/dest/folder
Ви можете використовувати опцію -r з командою scp для копіювання каталогів рекурсивно в будь-яку систему. Якщо вам потрібно щось інше, зверніться до навчального посібника scp . -r опція означає рекурсивну роботу в більшості команд Linux.
-r
варіант уже запропонований років тому і є прийнятою відповіддю.
Інший (швидше за все, кращий для повторного використання) варіант - використовувати NFS - перевірити nfs-kernel-сервер та як налаштувати NFS-спільні папки.
scp
але NFS - це не варіант.