Відповіді:
Так, використовуйте -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 - це не варіант.