gpt4 book ai didi

Python 2.7.3 : Copying symlinks, 但不跟

转载 作者:太空狗 更新时间:2023-10-29 12:06:07 24 4
gpt4 key购买 nike

我使用的是 Python 2.7.3。我正在使用 Python 脚本将目录树的一部分从一个位置复制到另一个位置。一些需要复制的文件是符号链接(symbolic link)。

如何使用 Python 将符号链接(symbolic link)从一个位置复制到另一个位置而不遵循它们? (我只是希望它像“常规”文件一样盲目复制它们)

我发现 Python 3.3 的 shutil.copy() 支持参数 follow_symlinks=False,但旧版本的 shutil 不支持。

编辑:更多细节:

此脚本的目的是从指定位置获取所有文件并将它们拆分为单独的存档。我知道我可以通过压缩整个目录并拆分存档来做到这一点,但我需要能够单独提取每个存档,而无需重新加入一个大存档。此外,每个存档必须小于指定大小。

基本方法:

  1. 获取源目录所有文件的所有绝对路径
  2. 获取所有文件的所有大小
  3. 按大小对所有文件(无论位置)进行排序
  4. 将文件从位置 X 复制到 tmp 位置(直到复制文件的总和 <= 最大存档大小)
  5. 创建 tmp 存档
  6. 清理 tmp 位置
  7. 在还有文件要复制的时候回到4

如有任何反馈,我们将不胜感激。谢谢。

最佳答案

复制目录树的一部分,你是说?在这种情况下,请尝试 shutil.copytree() .

If symlinks is true, symbolic links in the source tree are represented as symbolic links in the new tree, but the metadata of the original links is NOT copied; if false or omitted, the contents and metadata of the linked files are copied to the new tree.

所以只要您不需要保持元数据相同,这应该就可以正常工作(实际上,符号链接(symbolic link)本身甚至可以有这样的元数据,还是它们只是引用文件/对象的元数据?指向?)。另请注意,您不必使用 copytree() 复制整棵树; ignore 参数允许您提供一个可调用对象,该调用对象将删除要复制的文件和目录。

但要注意一件事:如果您修改传递给 ignore 可调用对象的内容列表,这也会影响复制的内容(如您在 the copytree() source code 中所见)。


(从评论中复制/释义)

作为 shutil.copytree() 的实现展示了 copytree() 如何处理符号链接(symbolic link) (linkto = os.readlink(srcname); os.symlink (linkto, dstname)),即使 copytree() 本身没有用,它也可以用作如何“复制”符号链接(symbolic link)的引用。

关于Python 2.7.3 : Copying symlinks, 但不跟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11615878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com