Подтвердить что ты не робот

Как возобновить scp с частично скопированными файлами?

Я использую команду scp shell для копирования огромной папки файлов.

Но в какой-то момент мне пришлось убить бегущую команду (Ctrl + C или kill).

К моему пониманию scp скопировал файлы последовательно, поэтому должен быть только один частично скопированный файл.

Как можно возобновить повторную команду scp, чтобы не перезаписывать успешно скопированные файлы и правильно обрабатывать частично скопированные файлы?

P.S. Я знаю, что могу делать такие вещи в rsync, но scp быстрее для меня по какой-то причине, и я использую его вместо этого.

4b9b3361

Ответ 1

Вы должны использовать rsync над ssh

rsync -P -e ssh [email protected]:/remote/path /local/path

Ключевой параметр -P, который совпадает с --partial --progress

Также можно использовать другие параметры, такие как -a (для режима архива) и -z (для включения сжатия).

Руководство: https://download.samba.org/pub/rsync/rsync.html

Ответ 2

Альтернатива rsync:

Используйте sftp с опцией -r (рекурсивно скопировать целые каталоги) и опцией -a команды sftp get, чтобы возобновить частичную передачу существующих файлов.

Предварительное условие: В вашей реализации sftp уже есть параметр get с -a.

Пример:

Скопируйте каталог /foo/bar с удаленного сервера в локальный текущий каталог. Каталог bar будет создан в вашем локальном текущий каталог.

echo "get -a /foo/bar" | sftp -r server

Ответ 3

Начиная с OpenSSH 6.3, вы можете использовать команду reget в sftp.

У него тот же синтаксис, что и у get, за исключением того, что он начинает передачу с конца существующего локального файла.

Ответ 4

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

ctrl + z в фоновом режиме и остановите его, затем ssh перейдите на принимающий сервер и войдите в систему, а затем выйдите. Теперь fg процесс scp и наблюдайте его возобновление с "остановленного"!

Ответ 5

Когда rsync заглох, а после пары секунд, когда я начал нормально работать, я получил следующее решение для командной строки:

cat run_me.sh
#!/bin/bash
while [ 1 ]
do
  rsync --partial --progress --rsh=ssh [email protected]:/path/file.tgz file.tgz &
  TASK_PID=$!
  sleep 60
  kill $TASK_PID
  sleep 2
done

Ответ 6

Вы можете использовать -rsh и -P rsync. -P предназначен для частичной загрузки, а -rsh указывает на передачу через протокол ssh.

Полная команда будет выглядеть так: rsync -P -rsh [email protected]: /remote/path/local/path

Ответ 7

Вчера я получил тот же самый вопрос, передав огромную свалку sql через scp, мне повезло с wget --continue the_url

Это сообщение в блоге объясняет это довольно хорошо http://www.cyberciti.biz/tips/wget-resume-broken-download.html