В настоящее время я могу скопировать только один .tar файл. Но как я могу рекурсивно копировать каталоги с помощью scp?
Ответ 1
Используйте -r:
scp -rp sourcedirectory user@dest:/path
-r означает рекурсивный
-p сохраняет время модификации, время доступа и режимы из исходного файла.
Примечание: команда создает каталог sourcedirectory внутри /path, поэтому файлы будут находиться в /path/sourcedirectory.
Ответ 2
Хотя предыдущий ответ технически верный, все же следует рассмотреть возможность использования rsync. rsync сравнивает данные на отправляющей и получающей сторонах, с помощью механизма различий, поэтому ему не нужно повторно отправлять данные, которые уже были отправлены ранее.
Если вы собираетесь копировать что-то на удаленную машину более одного раза, используйте rsync. На самом деле, лучше использовать rsync каждый раз, потому что он имеет больше возможностей для управления такими вещами, как копирование разрешений и прав владельца на файлы. Исключает определенные файлы или каталоги. В общем:
$ rsync -av /local/dir/ server:/remote/dir/
синхронизирует локальный каталог с удаленным каталогом. Если вы запустите ее во второй раз, а содержимое локального каталога не изменится, данные не будут переданы - это гораздо эффективнее, чем каждый раз запускать scp и копировать все подряд.
Кроме того, в отличие от scp, rsync позволяет легко восстанавливать прерванную передачу.
Наконец, современные версии rsync по умолчанию работают по ssh, поэтому если scp уже работает, rsync будет вполне подходящей заменой.
Ответ 3
Параметр рекурсивного копирования '-r' (нижний регистр)
scp –r
Часто путают с опцией обычного локального рекурсивного копирования '-R' (верхний регистр)
cp -R
Ответ 4
Лучший способ - использовать rsync через SSH
rsync -a -essh /source/ user@dest-server:/dest/
rsync -a -essh user@source-server:/source/ /dest/
Мои любимые варианты: -Pazvessh --delete:
-a: режим архива (включает множество стандартных параметров по умолчанию, включая сохранение символических ссылок)
-z: сжать
-v: verbose: показать файлы
-P: показать процесс выполнения файлов/оставшихся файлов
-e ssh: сделать rsync в протоколе ssh
--delete: удалять исходные файлы
Ответ 5
После поиска флага рекурсивного копирования и успешного его использования благодаря этому сообщению я хотел бы опубликовать просто предложение.
Если вы копируете (рекурсивно) каталог, файлы могут быть отправлены в сжатом виде и вы сможете сэкономить время при передаче В итоге я сделал следующее:
local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz
Ответ 6
Вы можете рекурсивно скопировать каталог в сжатый архив с помощью этой простой команды:
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...
Ответ 7
Если вы предпочитаете передавать пароль пользователя в качестве параметра, а не вводить его в интерактивном режиме, вы можете использовать sshpass( sudo apt-get install -y sshpass).
Пример:
sshpass -p 'remote_password' scp -rp /src/folder
myremoteusername@122.10.12.123:/dest/folde
Linux