В настоящее время я могу скопировать только один .tar
файл. Но как я могу рекурсивно копировать каталоги с помощью scp
?
Да, используйте -r
:
scp -rp sourcedirectory [email protected]:/path
Примечание: это создает sourcedirectory
внутри /path
таким образом файлы будут в /path/sourcedirectory
Хотя предыдущие ответы технически верны, вам также следует рассмотреть возможность использования rsync
. rsync
сравнивает данные на отправляющей и получающей сторонах с помощью механизма diff, поэтому не нужно повторно отправлять данные, которые уже были отправлены ранее.
Если вы собираетесь копировать что-либо на удаленную машину более одного раза, используйте rsync
. На самом деле, хорошо использовать rsync
каждый раз, потому что он имеет больше элементов управления для таких вещей, как копирование прав доступа и владения файлами и исключение определенных файлов или каталогов. В основном:
$ rsync -av /local/dir/ server:/remote/dir/
синхронизирует локальный каталог с удаленным каталогом. Если вы запустите его во второй раз и содержимое локального каталога не изменится, никакие данные не будут переданы - гораздо эффективнее, чем запуск scp
и копирование всех данных каждый раз.
Кроме того, rsync
позволяет очень легко восстанавливаться после прерванной передачи, в отличие от scp
.
Наконец, современные версии rsync
по умолчанию запускаются через ssh, поэтому, если scp
уже работает, rsync
должно быть в значительной степени заменой.
Это то, что -r
опция для. :)
Смотрите страница руководства scp для получения дополнительной информации, если это необходимо.
Параметр рекурсивного копирования '-r' (нижний регистр)
scp -r
Что я путаю с опцией обычного локального рекурсивного копирования '-R' (верхний регистр)
cp -R
Лучший способ - использовать rsync поверх SSH.
rsync -a -essh /source/ [email protected]:/dest/
rsync -a -essh [email protected]:/source/ /dest/
Мои любимые варианты: -Pazvessh --delete:
После поиска флага рекурсивной копии и успешного его использования благодаря этому сообщению, я хотел бы опубликовать только предложение.
Если дело в том, что вы копируете (рекурсивно) каталог. Может быть, если файлы отправлены в сжатом виде, вы можете сэкономить время при передаче
В итоге я сделал:
local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz [email protected]:/directory
ssh [email protected]
remote$ tar -xzvf local.tar.gz
Надеюсь это поможет
Вы можете рекурсивно скопировать каталог в сжатый архив с помощью этой простой команды:
ssh -p 22 [email protected] 'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz
Например, чтобы скопировать содержимое /var/log
от domain.com
до ~/logs.tgz
ты бежишь:
ssh -p 22 [email protected] 'cd /var && tar zcvf - log' > ~/logs.tgz
Вы также можете извлечь файлы в целевой системе, используя каналы. Эта команда скопирует содержимое /var/log
в domain.com
до ~/destination/log
в вашей системе:
ssh -p 22 [email protected] '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 [email protected]:/dest/folder
Вы можете использовать опцию -r с командой scp для рекурсивного копирования каталогов в любой системе. Если вам нужно что-то еще, обратитесь к руководство по команде scp . Опция -r обозначает рекурсивную операцию в большинстве команд Linux.