Python 2.7.3:复制符号链接,但不遵循

时间:2012-07-23 15:43:46

标签: python linux python-2.7 symlink

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

如何使用Python将符号链接从一个位置复制到另一个位置而不遵循它们? (我只是想让它盲目地复制它们,就像它们是'常规'文件一样)

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

编辑:更多详情:

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

基本方法:

  1. 获取所有源目录文件的绝对路径
  2. 获取所有文件的所有尺寸
  3. 按大小排序所有文件(无论位置如何)
  4. 将文件从位置X复制到tmp位置(直到复制文件的总和为< =到最大存档大小)
  5. 创建tmp
  6. 的存档
  7. 清理tmp位置
  8. 当仍有要复制的文件时,请返回4
  9. 任何反馈都将不胜感激。感谢。

1 个答案:

答案 0 :(得分:3)

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

  

如果符号链接为true,则源树中的符号链接在新树中表示为符号链接,但不复制原始链接的元数据;如果为false或省略,则链接文件的内容和元数据将复制到新树中。

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

要注意的一件事是:如果您修改传入ignore可调用内容的内容列表,这也会影响复制的内容(如the copytree() source code中所示)。< / p>


(从评论中复制/释义)

由于shutil.copytree()的实现显示copytree()如何处理符号链接(linkto = os.readlink(srcname); os.symlink(linkto, dstname)),因此即使{{1}也可以用作“复制”符号链接的参考本身没用。