我想使用该命令在管道损坏后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
您用丢失的文件更新已安装的远程目录中的文件。
答案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“尝试继续中断的传输,而不是覆盖现有的部分或完整文件副本。如果部分内容与正在传输的内容不同,则生成的文件可能已损坏。