![sftp put - эквивалент rsync](https://rvso.com/image/164741/sftp%20put%20-%20%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%20rsync.png)
Я хотел бы использовать команду 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
Использование параметра -a
sftp. man sftp
гласит, что это предписывает sftp «Попытка продолжить прерванную передачу вместо того, чтобы перезаписывать существующие частичные или полные копии файлов». Если частичное содержимое отличается от передаваемого, то результирующий файл, скорее всего, будет поврежден.