it-swarm-ru.tech

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

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

610
kernel

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

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

Примечание: это создает sourcedirectory внутри /path таким образом файлы будут в /path/sourcedirectory

981
dmourati

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

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

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

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

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

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

177
Phil Hollenback

Это то, что -r опция для. :)

Смотрите страница руководства scp для получения дополнительной информации, если это необходимо.

34
HedgeMage

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

scp -r

Что я путаю с опцией обычного локального рекурсивного копирования '-R' (верхний регистр)

cp -R
12
Tarun

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

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

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

Мои любимые варианты: -Pazvessh --delete:

  • -a: режим архива (включает множество стандартных параметров по умолчанию, включая сохранение символических ссылок)
  • -z: сжать
  • -v: verbose: показать файлы
  • -P: показывать прогы как файлы, выполненные/оставшиеся файлы
  • -e ssh: сделать rsync в протоколе ssh
  • --delete: удалить файлы в месте назначения, которых больше нет в источнике
7
mick

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

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

В итоге я сделал:

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

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

4
user9869932

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

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

2
Anubioz

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

Пример:

sshpass -p 'remote_password' scp -rp /src/folder [email protected]:/dest/folder
1
Franck Dernoncourt

Вы можете использовать опцию -r с командой scp для рекурсивного копирования каталогов в любой системе. Если вам нужно что-то еще, обратитесь к руководство по команде scp . Опция -r обозначает рекурсивную операцию в большинстве команд Linux.

0
atthik