首页 > 解决方案 > Python FTP ftplib 将整个文件夹移动到另一个目录失败,并显示“无法链接到另一个设备上的文件”

问题描述

我遇到了关于如何使用 Python ftplib 将文件从一个位置移动到另一个位置的各种答案(例如How to move and replace files from FTP folder to another folder in same FTP)。我正在尝试将整个文件夹(包括所有子文件夹和文件)移动到另一个位置。

假设我有一个文件夹,,/FromPath/MoveThisFolder这个文件夹可以有未知数量的子文件夹和文件,即/FromPath/MoveThisFolder/A/FromPath/MoveThisFolder/B,它们都包含文件等。

我想移动MoveThisFolder/ToPath,这样我就可以/ToPath/MoveThisFolder将所有包含的子文件夹和文件移到/FromPath/MoveThisFolder.

我怎么能做到这一点?

据我所知,ftp.rename根据 Python 文档,它适用于文件:

FTP.rename(fromname, toname)

将服务器上的文件 fromname 重命名为 toname。

如果我尝试使用 ftp.rename(),我会收到一个我无法解决的错误:

ftp.rename(ftp_from_loc, ftp_to_loc)
error_perm: 550 rename: Cannot link to a file on another device.

我也尝试根据这个问题mv使用within ,但出现错误ftp.sendcmd()

ftp.sendcmd('mv ' + ftp_from_loc + ' ' + ftp_to_loc)

error_perm: 500 'MV /sourcePath/* /destinationPath/': 命令不理解。

(当然我已经用虚拟名称替换了实际路径,但是我已经三次检查了路径并且它们是正确的)。

标签: pythonunixftpftplib

解决方案


在大多数系统上移动/重命名文件或文件夹没有区别。所以FTP.rename也可以用于目录。

通常不支持的(通常,仅在 FTP 中不支持)是将文件(或目录)移动到另一个文件系统(只允许另一个驱动器/设备)。看来这正是您正在尝试的。移动到另一个文件系统并不是真正的移动,它必须涉及复制所有文件和删除原始文件。虽然真正的移动不会复制任何数据,但它只是移动元数据。


推荐阅读