Может ли scp копировать каталоги рекурсивно?

В настоящее время я могу скопировать только один файл .tar. Но как я могу скопировать каталоги рекурсивно с помощью scp?

493 голоса | спросил kernel 29 AMpFri, 29 Apr 2011 08:24:45 +040024Friday 2011, 08:24:45

9 ответов


800

Yup, используйте -r:

scp -rp sourcedirectory [email protected]:/path
  • -r означает рекурсивный
  • -p сохраняет время модификации, время доступа и режимы из исходного файла.

Примечание. Это создает sourcedirectory внутри /path, поэтому файлы будут находиться в /path/sourcedirectory

ответил dmourati 29 AMpFri, 29 Apr 2011 08:28:41 +040028Friday 2011, 08:28:41
143

В то время как предыдущие ответы технически правильны, вы также должны рассмотреть возможность использования rsync . rsync сравнивает данные на отправляющей и принимающей сторонах с механизмом diff, поэтому ему не нужно повторно отправлять данные, которые уже были отправлены ранее.

Если вы собираетесь копировать что-то на удаленный компьютер более одного раза, используйте rsync. На самом деле, полезно использовать rsync каждый раз, потому что у него больше элементов управления для таких вещей, как копирование прав на файл и права собственности и исключение определенных файлов или каталогов. В общем:

$ rsync -av /local/dir/ server:/remote/dir/

синхронизирует локальный каталог с удаленным каталогом. Если вы запустите его второй раз, а содержимое локального каталога не изменилось, данные не будут переданы - гораздо эффективнее, чем запуск scp и копирование всего каждый раз.

Кроме того, rsync позволяет очень легко восстанавливать прерванные передачи, в отличие от scp.

Наконец, современные версии rsync по умолчанию запускаются через ssh, поэтому, если scp уже работает, rsync в значительной степени будет падать - в замене.

ответил Phil Hollenback 29 AMpFri, 29 Apr 2011 09:11:23 +040011Friday 2011, 09:11:23
28

Это вариант -r. :)

Подробнее см. справочную страницу scp для получения дополнительной информации.

ответил HedgeMage 29 AMpFri, 29 Apr 2011 08:27:57 +040027Friday 2011, 08:27:57
7

Рекурсивный вариант копирования '-r' (нижний регистр)

scp -r

Что я путаю с регулярным локальным рекурсивным вариантом копирования «-R» (верхний регистр)

cp -R
ответил Tarun 11 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 11 Sep 2013 21:53:51 +0400 2013, 21:53:51
4

Лучший способ - использовать rsync через SSH

rsync -a -essh /source/ [email protected]:/dest/

rsync -a -essh [email protected]:/source/ /dest/

Мои избранные варианты: -Pazvessh --delete:

  • -a: режим архива (включая множество стандартных параметров по умолчанию, включая сохранение символических ссылок)
  • -z: compress
  • -v: verbose: показать файлы
  • -P: показать progess как файлы, сделанные /оставшиеся файлы
  • -e ssh: выполнить rsync в протоколе ssh
  • - удалить: удалить файлы в месте назначения, которые больше не находятся в исходном тексте
ответил mick 5 42015vEurope/Moscow11bEurope/MoscowThu, 05 Nov 2015 21:33:20 +0300 2015, 21:33:20
3

После поиска флага рекурсивной копии и успешного использования этого сообщения, я хотел бы опубликовать только предложение.

Если дело в том, что вы копируете (рекурсивно) каталог. Может быть, если файлы отправлены сжатыми, вы можете сэкономить время в передаче

В конце концов я сделал следующее:

local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz [email protected]:/directory
ssh [email protected]
remote$ tar -xzvf local.tar.gz

Надеюсь, что это поможет

ответил xyz 6 J0000006Europe/Moscow 2015, 21:00:04
1

Вы можете рекурсивно скопировать каталог в сжатый архив с помощью этой простой команды:

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 ...

ответил Anubioz 6 Jam1000000amWed, 06 Jan 2016 10:20:21 +030016 2016, 10:20:21
0

Если вы предпочитаете передавать пароль пользователя в качестве параметра, а не вводить его в интерактивном режиме, вы можете использовать sshpass (sudo apt-get install -y sshpass).

Пример:

sshpass -p 'remote_password' scp -rp /src/folder [email protected]:/dest/folder
ответил Franck Dernoncourt 6 Jam1000000amWed, 06 Jan 2016 09:49:03 +030016 2016, 09:49:03
-2

Другой вариант (скорее всего, для повторного использования) - использовать NFS - проверить nfs-kernel-server и как настроить общие ресурсы NFS.

ответил Andrei Pokrovsky 12 AM00000010000005531 2016, 01:08:55

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132