Ответы:
Да, используйте -r
:
scp -rp sourcedirectory user@dest:/path
Примечание: это создает sourcedirectory
внутреннюю часть, /path
поэтому файлы будут в/path/sourcedirectory
-pr
(параметры в обратном порядке) не будут копировать папки, а скорее их содержимое в целевой каталог (очевидно, порядок параметров имеет значение).
Хотя предыдущие ответы технически правильны, вы должны рассмотреть возможность использования rsync
вместо этого. rsync
сравнивает данные на отправляющей и принимающей сторонах с помощью механизма diff, поэтому ему не нужно повторно отправлять данные, которые уже были отправлены ранее.
Если вы собираетесь копировать что-либо на удаленную машину более одного раза, используйте rsync
. На самом деле, это полезно использовать rsync
каждый раз, потому что он имеет больше элементов управления для таких вещей, как копирование прав доступа и владения файлами и исключение определенных файлов или каталогов. В общем:
$ rsync -av /local/dir/ server:/remote/dir/
синхронизирует локальный каталог с удаленным каталогом. Если вы запустите его во второй раз и содержимое локального каталога не изменится, никакие данные не будут переданы - гораздо эффективнее, чем запускать scp
и копировать все данные каждый раз.
Кроме того, rsync
в отличие от , позволяет очень легко восстанавливаться после прерванных передач scp
.
Наконец, современные версии rsync
по умолчанию работают с ssh, поэтому, если scp
он уже работает, он rsync
должен быть заменой.
rsync
это более эффективно. В настоящее время он scp
не выполняет копирование между удаленными хостами (по крайней мере, без запуска клиента rsync на одном из них).
-av
: v - для многословного, a - для архива и является ярлыком для -rlptgoD, который подразумевает рекурсивное сохранение прав владельца и дат. Если вы хотите только рекурсивное использование-r
Вот для чего этот -r
вариант. :)
См. Справочную страницу scp для получения дополнительной информации, если это необходимо.
Параметр рекурсивного копирования '-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
поскольку файл является архивом tar в формате gzip (поскольку используется -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
at 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-server и как настроить общие ресурсы NFS.
scp
но NFS не вариант.