Ответы:
Да, используйте -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/logat 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 не вариант.