Назад | Перейти на главную страницу

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

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

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

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

Примечание. Это создает 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:

  • -a: режим архива (включить множество стандартных параметров по умолчанию, включая сохранение символических ссылок)
  • -z: сжать
  • -v: verbose: показать файлы
  • -P: показать процесс выполнения / оставшихся файлов
  • -e ssh: сделать rsync в протоколе ssh
  • --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.