Время от времени я загружаю очень большой файл через scp, и каждый раз, когда соединение обрывается и пересекает передачу, есть небольшая вероятность.
Есть ли способ возобновить это?
Время от времени я загружаю очень большой файл через scp, и каждый раз, когда соединение обрывается и пересекает передачу, есть небольшая вероятность.
Есть ли способ возобновить это?
Вы можете попробовать следующий подход: вместо scp используйте dd, чтобы пропустить загруженную часть и добавить остаток к файлу.
sofar=`ls -l ./destfile | awk '{print $5}'`
ssh rsys "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile
Возможная оптимизация: работа с большими блоками. Давайте оставим это как домашнее задание.
С scp
нет.
Если он имеется на обоих концах, вы можете использовать rsync -LvzP remoteserver:path/to/file localfile
для передачи одного файла.
Да, есть способы возобновления с точки прерывания, но это невозможно с помощью scp. sftp reget filename
делает то, что вам нужно. Yarek и Grawity предоставили действительные решения, которые мне +1 для обоих, но для возобновления с точки прерывания мне нравится rsync. Представленные примеры команд предполагают, что вы извлекаете файл с удаленного сервера на локальную рабочую станцию (загрузка). Пожалуйста, имейте в виду, что последние два параметра должны рассматриваться как source_file и target_file в этом порядке. Синтаксис имени файла зависит от того, является ли исходный или целевой файл локальным или удаленным. Если бы я отправлял (загружал) [текстовые] файлы, я бы переписал приведенные ниже примеры:
#From local to remote sofar=`ssh remote_system ls -l interrupted_file | awk '{print $5}'`; dd if=source_file bs=1 skip=$sofar | ssh remote_system "cat >> ./interrupted_file"
И к решению rsync я добавляю -e ssh
. Вы должны подумать, нужно ли вам многословие, сжатие, сохранение владения, разрешения, метка времени, рекурсивные каталоги и т.д. Проверьте справочные страницы и Google, относительно параметра -L. Возможно, вы захотите, чтобы символические ссылки оставались ссылками, а не ссылались на них.
rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file
Там другое решение (кроме rsync
или dd
решений , указанных здесь) , которые я не удивлён никто упоминается: это команда reput
из sftp
scp -o ConnectTimeout 60
Позволяет указать время ожидания для соединения. Может помешать вашей связи от разрыва.