sftp put - эквивалент rsync

sftp put - эквивалент rsync

Я хотел бы использовать команду putдля восстановления текущей передачи файлов sftpпосле разрыва канала.

Файлы следует загружать только в том случае, если размер конечного файла меньше размера исходного файла.

У меня нет sshдоступа, поэтому rsyncэто не вариант.

Изруководство по sftp, Я попробовал указать флаги put -a -r source_dir/. Однако я получил сообщения об ошибках при передаче.

  • Ошибка: Couldn't stat remote file: No such file or directoryдля файлов, отсутствующих на сервере
  • Ошибка: Destination file bigger or same size as source fileдля файлов, которые уже находятся на сервере и, по идее, не должны передаваться

Реальный пример первой ошибки:

Uploading of file /Volumes/Seagate/amphioxus/raw_h5/9N0Bp0b0_m150427_041848_42182_c100810932550000001823181110291543_s1_p0.2.bax.h5.gz to /deposits/Pacbio_amphioxus/raw_h5/9N0Bp0b0_m150427_041848_42182_c100810932550000001823181110291543_s1_p0.2.bax.h5.gz failed!
Couldn't stat remote file: No such file or directory

Конечно, файл существует в исходном каталоге.

Есть ли какие-нибудь решения этой проблемы?

решение1

Это не решение, но обходной путь — смонтировать сервер локально, а затем просто скопировать данные.

sshfsможно использовать для монтирования удаленного каталога:

sudo sshfs -o allow_other,default_permissions [email protected]:/ /mnt/local_directory

Тогда используйте

cp -ru

где u обновляет файлы, находящиеся в смонтированном удаленном каталоге, на отсутствующие.

решение2

Лучшим решением будет попросить администратора удаленной системы предоставить вам sshдоступ и использование rsyncили, может быть, только rsyncдоступ, если это возможно.

sftpможет помещать (и получать) файлы, но не каталоги (деревья каталогов с их содержимым).

Обходной путь —создайте tarball [сжатый] tarfile и поместите его сsftp.


tar -cvzf filename.tar.gz source_dir/

Если вам нужно восстановить его, получите его, sftpпроверив содержимое.

tar -tvf filename.tar.gz

убедитесь, что вы находитесь в правильном каталоге, и извлеките из tarball,

tar -xvf filename.tar.gz

решение3

Использование параметра -asftp. man sftpгласит, что это предписывает sftp «Попытка продолжить прерванную передачу вместо того, чтобы перезаписывать существующие частичные или полные копии файлов». Если частичное содержимое отличается от передаваемого, то результирующий файл, скорее всего, будет поврежден.

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