Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7.3:复制符号链接,但不要';我跟不上_Python_Linux_Python 2.7_Symlink - Fatal编程技术网

Python 2.7.3:复制符号链接,但不要';我跟不上

Python 2.7.3:复制符号链接,但不要';我跟不上,python,linux,python-2.7,symlink,Python,Linux,Python 2.7,Symlink,我正在使用Python 2.7.3。我正在编写一个Python脚本,将目录树的一部分从一个位置复制到另一个位置。需要复制的一些文件是符号链接 如何使用Python将符号链接从一个位置复制到另一个位置而不遵循它们?(我只是希望它盲目地复制它们,就像它们是“常规”文件一样) 我发现Python3.3的shutil.copy()支持参数follow\u symlinks=False,但较旧版本的shutil不支持 编辑:更多详细信息: 此脚本的目的是从指定位置获取所有文件,并将它们拆分为单独的存档。我

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

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

我发现Python3.3的
shutil.copy()
支持参数
follow\u symlinks=False
,但较旧版本的shutil不支持

编辑:更多详细信息:

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

基本方法:

  • 获取源目录中所有文件的所有绝对路径
  • 获取所有文件的所有大小
  • 按大小对所有文件进行排序(不考虑位置)

  • 将文件从位置X复制到tmp位置(直到复制的文件总和复制目录树的一部分,你说?在这种情况下,请尝试

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

    因此,只要您不需要保持元数据不变,这应该可以正常工作(实际上,符号链接本身是否可以拥有这样的元数据,或者它们是否只是引用它们指向的文件/对象的元数据?);参数
    ignore
    允许您提供一个可调用函数,该函数将修剪要复制的文件和目录

    不过,有一件事需要注意:如果修改传递到
    ignore
    callable的内容列表,也会影响复制的内容(如中所示)


    (从评论中复制/解释)


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

    我已经为我的问题添加了更多细节。我认为
    shutil.copytree()
    不适合我目前设计的解决方案。也许不行,但是
    copytree()
    我链接的实现向您展示了
    copytree()的工作方式
    simlinks
    为真时处理符号链接。为什么不将其用作参考?您可以使用自己的复制方法来包装
    shutil.copy()
    shutil.copy2()
    ,该方法添加
    shutil.copytree()
    中的那些额外行,并使用它们。看起来shutil.copytree()使用的是
    linkto=os.readlink>(srcname)
    后跟
    os.symlink(linkto,dstname)
    。这基本上就是我在“变通”时所做的!我想这意味着这是一种方法。既然注释中包含答案,我应该将其标记为答案吗?还是单独添加答案更好?编辑我的答案以包括(大部分内容)
    copytree()
    中的相关代码行。