Как возобновить scp с частично скопированными файлами?
Я использую команду scp shell для копирования огромной папки файлов.
Но в какой-то момент мне пришлось убить бегущую команду (Ctrl + C или kill).
К моему пониманию scp скопировал файлы последовательно, поэтому должен быть только один частично скопированный файл.
Как можно возобновить повторную команду scp, чтобы не перезаписывать успешно скопированные файлы и правильно обрабатывать частично скопированные файлы?
P.S. Я знаю, что могу делать такие вещи в rsync, но scp быстрее для меня по какой-то причине, и я использую его вместо этого.
Ответы
Ответ 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