我正在使用Python 2.7.3。我正在使用Python脚本将目录树的一部分从一个位置复制到另一个位置。一些需要复制的文件是符号链接。
如何使用Python将符号链接从一个位置复制到另一个位置而不遵循它们? (我只是想让它盲目地复制它们,就像它们是'常规'文件一样)
我发现Python 3.3的shutil.copy()
支持参数follow_symlinks=False
,但旧版本的shutil不支持。{/ p>
编辑:更多详情:
此脚本的目的是从指定位置获取所有文件并将其拆分为单个存档。我知道我可以通过压缩整个目录并拆分存档来实现这一点,但我需要能够单独提取每个存档而无需重新加入一个大型存档。此外,每个存档必须小于指定的大小。
基本方法:
任何反馈都将不胜感激。感谢。
答案 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}也可以用作“复制”符号链接的参考本身没用。