【问题标题】:Deleting all files in FTP folder in Python fails with "500 Invalid command: "MLSD""在 Python 中删除 FTP 文件夹中的所有文件失败,并显示“500 Invalid command: “MLSD””
【发布时间】:2021-06-30 12:10:17
【问题描述】:

我正在尝试使用 ftplib 和 Python 删除一个文件夹。 我试过ftp.delete,但它只接受文件 我试过ftp.rmd 但这仅适用于空文件夹。 试了一个我在网上找到的递归函数:

def remove_ftp_dir(ftp, path):
    for (name, properties) in ftp.mlsd(path=path): 
        if name in ['.',   '..']:
            continue
        elif properties['type'] == 'file':
            ftp.delete(f"{path}/{name}")
        elif properties['type'] == 'dir':
            remove_ftp_dir(ftp, f"{path}/{name}")
    ftp.rmd(path) 

当尝试迭代 ftp.mlsd 时,我得到:

ftplib.error_perm: 500 无效命令:“MLSD”

【问题讨论】:

    标签: python ftp ftplib


    【解决方案1】:

    对于以后需要这个的每个人,我写了一个删除功能,可以在每个服务器上工作:

    def delete_dir (ftp , deleteDirPath):
    ftp.cwd(deleteDirPath)
    print("Current wd --- " , ftp.pwd())
    contents =ftp.nlst(deleteDirPath)
    # if empty dir - delete it
    try:
        ftp.rmd(deleteDirPath)
    except error_perm as e:
        if not e.args[0].startswith("550"):
            raise
    
    # loop on all folder objects list
    for name in contents:
        try:
            # delete if file
            print(deleteDirPath + "/" + name)
            ftp.delete( deleteDirPath + "/" + name)
            #time.sleep(0.7)
            print("Succeed delete = ", deleteDirPath + "/" + name)
        except:
            # if folder
            delete_dir(ftp ,deleteDirPath + "/" + name)
            
    # if empty dir - delete it
    try:
        ftp.rmd(deleteDirPath)
    except error_perm as e:
        if not e.args[0].startswith("550"):
            raise
    

    【讨论】:

    • 您的缩进错误 + 您的代码中有两次不必要的 rmd 块。第二个实例就足够了。 + 你永远不会检查cwd 的结果。如果你遇到一个你没有权限删除的文件,你的代码就会开始做很多疯狂的事情。 + 硬编码550 代码绝对不会让您的代码“在每个服务器上工作”
    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多