python - 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/': 命令不理解。
(当然我已经用虚拟名称替换了实际路径,但是我已经三次检查了路径并且它们是正确的)。
解决方案
在大多数系统上移动/重命名文件或文件夹没有区别。所以FTP.rename
也可以用于目录。
通常不支持的(通常,仅在 FTP 中不支持)是将文件(或目录)移动到另一个文件系统(只允许另一个驱动器/设备)。看来这正是您正在尝试的。移动到另一个文件系统并不是真正的移动,它必须涉及复制所有文件和删除原始文件。虽然真正的移动不会复制任何数据,但它只是移动元数据。
推荐阅读
- android - 更改 Android Spinner 第一项背景颜色
- vue.js - 引导程序中出现了一些问题,我需要一行 4 列,但它给我每行 1 列
- php - 在woodmart主题(元素网格或轮播)中隐藏缺货产品
- python-3.x - 在 python 中使用 simpy 包进行模拟时出现值错误
- powershell - Powershell - 捕获 RPC 服务器不可用错误 HRESULT:0x800706BA
- c++ - 了解如何将 typedef void 函数与指针作为参数一起使用
- javascript - 需要对 switch 语句不区分大小写的帮助
- javascript - 有没有 MQTT 共享订阅的替代方案?
- cart - 在 Woo 订阅结帐中更改付款日期
- c++ - 类基和派生中的属性 shared_ptr 问题