带有元数据的python复制文件,shutil vs手动打开和写入重复文件

时间:2012-08-09 16:37:31

标签: python shutil file-copying

根据http://docs.python.org/library/shutil.html使用这些方法不会复制元数据,包括所有权,ACL和资源分叉。是否会使用基本文件读取方法打开文件并将其写回到重复文件,换行,保持文件元数据完好无损?我的猜测是肯定的。目标磁盘是否必须与源保持完整的源格式相同?我的猜测是否定的。 我浏览了一下,没有看到任何特定的内容。我想基本上使用python将运行不同操作系统的3台不同的计算机备份到一个中心位置。复制的文件完全相同,就好像我可以替换原件并看不出任何差异一样。感谢您的任何见解!

2 个答案:

答案 0 :(得分:2)

我有一个类似的问题,我必须保留unix文件系统的所有者和组信息。这些只是整数,但shutil.copy2不保留它们。虽然您要跨系统进行复制,但您可以修改代码以在某处存储元数据,然后在完成复制后应用它。

import os
import shutil
import stat

def CopyMinusP(src, dest):
  file_stat = os.stat(src)
  owner = file_stat[stat.ST_UID]
  group = file_stat[stat.ST_GID]
  print "Owner: %d  Group: %d" % (owner, group)  # for diagnostics
  shutil.copy2(src, dest)
  os.chown(dest, owner, group)

答案 1 :(得分:0)

不,只是打开源文件进行读取,而写入的目标文件不会复制元数据。操作系统应该如何知道呢?此外,不同的文件系统支持不同的元数据,并且没有与文件系统无关的方式来复制所有元数据。在不同文件系统之间进行复制时,通常无法保留元数据。复制到FAT文件系统时,如何保留资源分支?在FAT上根本就没有这样的东西。所以你的猜测都是错误的。

您应该使用一个好的备份解决方案,而不是完全支持您使用的所有文件系统。