Есть ли способ возобновить прерванную SCP-загрузку файла?

Есть ли способ возобновить прерванную SCP-загрузку файла?

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

Есть ли способ возобновить его?

решение1

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

sofar=`ls -l ./destfile | awk '{print $5}'`
ssh user@host "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile

Возможная оптимизация: работа с большими блоками. Оставим это как домашнее задание.

решение2

С scp, нет.

Если он есть на обоих концах, вы можете использовать его rsync -LvzP remoteserver:path/to/file localfileдля передачи одного файла.

решение3

Да, есть способы возобновить работу с точки прерывания, но это невозможно с помощью scp. sftp reget filenameделает то, что вам нужно. Yarek и Grawity предоставили допустимые решения, которым я ставлю +1 обоим, но для возобновления работы с точки прерывания мне нравится rsync. Оба примера команд предполагают, что вы извлекаете файл с удаленного сервера на свою локальную рабочую станцию ​​(загружаете). Пожалуйста, имейте в виду, что последние два параметра следует считать source_file и target_file в этом порядке. Синтаксис имени файла зависит от того, является ли исходный или целевой файл локальным или удаленным. Если бы я отправлял (загружал) [текстовые] файлы, я бы переписал приведенные примеры следующим образом:

#От локального к удаленному
sofar=`ssh удаленная_система ls -l прерванный_файл | 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

решение4

Да, если оба конца поддерживают sftp - после scp remoteuser@remotehost:/absolute/filename .сбоя вы можете возобновить загрузку, выполнив sftp remoteuser@remotehostи затем , reget /absolute/filenameчтобы возобновить загрузку.

Связанный контент