复制文件,保留权限和所有者

gue*_*tli 13 python file-permissions

shutil的文档告诉我:

即使是更高级别的文件复制功能(shutil.copy(),shutil.copy2())也无法复制所有文件元数据.在POSIX平台上,这意味着文件所有者和组以及ACL都会丢失

如果我需要在python中复制文件,如何保留文件所有者和组?

该进程以root身份在linux上运行.

更新:我们不使用ACL.我们只需要保留使用tar和rsync等工具保存的东西.

Tho*_*ers 18

你或许可以使用os.stat,以获得guiduid喜欢这个答案,然后重新设置uidguid使用后的应对os.chown.

  • @lunixbochs:使用 os.stat 读取源文件的 uid、gid 然后使用 os.chown(path, uid, gid) 将它们设置在目标文件上有什么问题吗? (2认同)
  • 为我工作。我只是看到了chmod,而不是chown(是在编辑中吗?)。您应该注意对root特权的潜在要求,该特权将用户/组任意设置为您自己以外的其他用户。 (2认同)

use*_*424 8

您可以使用该subprocess模块:

from subprocess import Popen

p = Popen(['cp','-p','--preserve',src,dest])
p.wait()
Run Code Online (Sandbox Code Playgroud)

  • 如果您复制大量文件,这会变得非常慢。 (2认同)

May*_*ado 6

我是这样做的:

import os
import stat
import shutil

def copyComplete(source, target):
    # copy content, stat-info (mode too), timestamps...
    shutil.copy2(source, target)
    # copy owner and group
    st = os.stat(source)
    os.chown(target, st[stat.ST_UID], st[stat.ST_GID])
Run Code Online (Sandbox Code Playgroud)

  • 为什么不只是 `os.chown(target, st.st_uid, st.st_gid)` (2认同)