В настоящее время я могу скопировать только один .tar
файл. Но как я могу рекурсивно копировать каталоги с помощью scp
?
Ага, используйте -r
:
scp -rp sourcedirectory user@dest:/path
Примечание. Это создает sourcedirectory
внутри /path
таким образом файлы будут в /path/sourcedirectory
Хотя предыдущие ответы технически верны, вам также следует подумать об использовании rsync
вместо. rsync
сравнивает данные на отправляющей и получающей сторонах с механизмом сравнения, поэтому ему не нужно повторно отправлять данные, которые уже были отправлены ранее.
Если вы собираетесь скопировать что-то на удаленный компьютер более одного раза, используйте 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/ user@dest-server:/dest/
rsync -a -essh user@source-server:/source/ /dest/
Мои любимые варианты: -Pazvessh --delete:
После поиска флага рекурсивного копирования и успешного его использования благодаря этой публикации я хотел бы опубликовать только предложение.
Если дело в том, что вы копируете (рекурсивно) каталог. Возможно, если файлы будут отправлены в сжатом виде, вы сможете сэкономить время при передаче
В итоге я сделал следующее:
local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz
Надеюсь это поможет
Вы можете рекурсивно скопировать каталог в сжатый архив с помощью этой простой команды:
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.
Другой вариант (вероятно, лучше для повторного использования) - использовать NFS - ознакомьтесь с nfs-kernel-server и как настроить общие ресурсы NFS.