因为要使用 python 写一个 FTP 的客户端,使用的 ftplib 库
也看了一些底层的代码。大部分都是通过调用 FTP 命令来操作 FTP 服务端的。
不过在做的过程中,发现对 FTP 命令的方式操作有很大的疑问。
FTP 命令是不是分层的?
例如我要在远程服务器移动某个文件:
在网上搜索的答案如下:
在 FTP 客户端中:
rename /public_html/upload/64/SomeMusic.mp3 /public_html/archive/2011/05/64/SomeMusic.mp3
使用 FTP 命令:
RNFR /public_html/upload/64/SomeMusic.mp3
RNTO /public_html/archive/2011/05/64/SomeMusic.mp3
我在命令行中,使用 ftp ip 登录 ftp 服务器后,使用 rename 命令可以移动,不过 RNFR 和 RNTO 两个命令提示无此命令。
不过使用 rename 命令的时候,还是有输出使用的 RETO。
又如 python 改变文件权限的 python 代码:
_connection.sendcmd('SITE CHMOD %s %s' % (permission, os.path.basename(file_item)))
这行代码的意思应该是使用的 SITE CHMOD 命令来修改权限。
不过在 ftp 命令行里使用 help 命令查看命令列表,却没有 SITE 命令。但这段代码在 python 总是运行成功,复制到命令行中执行,却提示不支持 SITE 命令。
这个我就不是太能理解了。难道 FTP 命令分层的?FTP 命令行包装了一层。底层又运行了一层?还是我理解出了岔子?这个问题太让我困惑了。
PS: 我想在 ftp 服务端实现复制文件,使用什么命令?搜了好久了,都没成功的。
1
sujin190 2019-09-10 11:14:35 +08:00
你把 ftp 协议和 ftp 命令混淆了吧
|
2
msg7086 2019-09-10 11:20:24 +08:00
FTP 软件里运行的不是 FTP 指令。
你要原始 FTP 指令要用 RAW 功能。 比如你用 lftp 客户端的话,改名是 mv a b 但是你要是打 FTP 指令的话,需要 quote RNFR a quote RNTO b |