我正在使用Python 2.7.3。 我正在处理一个Python脚本,将目录树的一部分从一个位置复制到另一个位置。 一些需要复制的文件是符号链接。
如何使用Python将符号链接从位置复制到另一个符号链接而不遵循它们? (我只是想要它们就像“常规”文件一样盲目地复制它们)
我发现用于Python 3.3的shutil.copy()
支持参数follow_symlinks=False
,而旧版本的shutil则不支持。
编辑:更多细节:
这个脚本的目的是从指定的位置获取所有文件,并将它们分解成单独的文件。 我知道我可以通过压缩整个目录和分割压缩文件来实现这一点,但是我需要能够单独提取每个压缩文件,而不必重新join到一个大的压缩文件中。 另外,每个存档必须小于指定的大小。
基本方法:
对于任何反馈,我们都表示感谢。 谢谢。
复制一个目录树的部分,你说? 在这种情况下,请尝试shutil.copytree()
。
如果符号链接为真,则源树中的符号链接在新树中表示为符号链接,但不会复制原始链接的元数据; 如果为false或省略,链接文件的内容和元数据将复制到新树中。
所以只要你不需要保持元数据相同,这应该工作得很好(实际上,即使有这样的元数据,它们自己的符号链接是否可以引用它们指向的文件/对象的元数据? )。 另外请注意,您不必使用copytree()
复制整个树。 ignore
参数允许您提供一个可调用的参数,它将删除要复制的文件和目录。
但要注意的一点是:如果修改传递给ignore
callable的内容列表,这也会影响拷贝的内容(就像你在copytree()
源代码中看到的copytree()
)。
(从评论中复制/转述)
由于shutil.copytree()
的实现显示了copytree()
如何处理符号链接( linkto = os.readlink(srcname); os.symlink(linkto, dstname)
),它可以作为如何“复制”即使copytree()
本身没有用处也是符号链接。