我是新手使用ftp,最近我遇到了这种非常有线的情况。
我试图将文件上传到别人的ftp站点,我试图使用此命令
lftp -e "set ftp:passive-mode true; put /dir/to/myfile -o dest_folder/`basename /dir/to/myfile`; bye" ftp://userName:[email protected]
但我得到了错误
put:访问失败:501磁盘空间不足:只有0个字节可用。 (到dest_folder / myfile)
当我登录到他们的网站并检查时,会上传一个带有myfile名称的0字节文件。
起初我以为ftp站点没有磁盘空间,但我尝试使用登录到站点
lftp userName:[email protected]
然后设置被动模式
set ftp:passive-mode true
然后上传文件(使用其他名称)
put /dir/to/myfile_1 -o dest_folder/`basename /dir/to/myfile_1`
这次文件成功上传没有501磁盘空间不足的错误。
有人知道为什么会这样吗?谢谢!
您可以尝试使用lftp -d
来启用调试/详细模式。一些FTP客户端使用ALLO
FTP命令,告诉FTP服务器提前“分配”一些字节数;然后FTP服务器可以接受/拒绝它。我怀疑lftp
正在向您的FTP服务器发送ALLO
,并且它是FTP服务器响应该ALLO
命令并带有501响应代码,导致您的问题。
根据更新/评论,OP确认lftp
使用ALLO
确实导致最初报告的行为。由于lftp
正在尝试更新上传文件的时间戳,因此发生了后续错误;这些尝试也被FTP服务器拒绝。 lftp
曾尝试使用MFMT
和SITE UTIME
FTP命令。
要禁用这些,并让lftp
成功获得OP,需要以下lftp
设置:
ftp:trust-feat no
ftp:use-allo no
ftp:use-feat no
ftp:use-site-utime no
ftp:use-site-utime2 no
使用这些设置,您应该能够让lftp
在不使用ALLO
命令的情况下上传文件,而无需使用MFMT
或SITE UTIME
尝试修改上传文件的服务器端时间戳。
希望这可以帮助!