繁体   English   中英

Python shutil.move:奇怪的软链接

[英]Python shutil.move: odd softlinking

我编写的脚本旨在将单个日间目录从旧位置移动到具有以下结构的新位置:

/old/YYYY/MM/DD
/new/YYYY/MM/DD

对于另一个任务(与数据的移动无关),我在新位置中创建了这样的软链接(这是我犯的第一个错误):

/new/2011/09 -> /old/2011/09

我的脚本必须使用此函数调用:

for d in os.listdir("/old/2011/09"):
    shutil.move(os.path.join("/old/2011/09/", d), os.path.join("/new/2011/09", d))

运行我的脚本后,2011/09的内容均为空。 我在使用未存档的数据时发生这种情况...大问题。 我的问题是,为什么shutil.move()没有给我一个错误,提示我正在移动的日期目录已经存在? 由于存在软链接,因此09内的每一天都应该是同一目录。

/new/2011/09/01 == /old/2011/09/01

在调用shutil.copy2之前,shutil.move调用不检查src和dst吗? 从文档中:“目标目录必须不存在。” 还是仅当它使用重命名时? 并且,如果这有所作为,那么旧位置和新位置都将成为glusterfs。

shutil.move文档

shutil.copy文档

感谢您的澄清。

编辑/更新 :我向python列表提交了一个问题,询问为什么存在此行为,并询问是否应更改( 列表归档 )。 他们建议我提交一个错误报告。 在进行测试以提交错误时,我发现此问题已在Python 2.7中修复。 您可以在move函数声明中看到源代码之间的差异: Python 2.6Python 2.7

仍然可以进行移动/重命名,但不会神奇地删除整个目录。

它归结为shutil.move中的这两行:

        copytree(src, real_dst, symlinks=True)
        rmtree(src)

其中src='old'real_dst='new/old' copytree命令复制old的子目录new/old 很好,尽管可能不是您想要的。

rmtree删除old目录。 这是一个问题,因为new现在是悬而未决的符号链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM