首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在tarfile中模仿`--numeric-owner`?

在Python的tarfile模块中,没有直接的选项来模仿--numeric-owner这个GNU tar的特性。--numeric-owner选项会在创建tar文件时,将文件的所有者和组ID转换为数字形式,而不是使用它们的名字。这在某些系统或环境中可能会有用,尤其是当所有者或组的名字在系统中不可用或不唯一时。

要在Python中实现类似的功能,你需要手动获取文件的所有者和组ID,并将它们转换为数字形式。以下是一个示例代码,展示了如何在创建tar文件时使用数字所有者:

代码语言:txt
复制
import os
import tarfile
import pwd
import grp

def get_numeric_owner(path):
    stat_info = os.stat(path)
    uid = stat_info.st_uid
    gid = stat_info.st_gid
    # 将UID和GID转换为数字形式
    return uid, gid

def create_tar_with_numeric_owner(tar_filename, files):
    with tarfile.open(tar_filename, "w") as tar:
        for file in files:
            uid, gid = get_numeric_owner(file)
            # 创建一个新的tarinfo对象,并设置uid和gid为数字
            tarinfo = tar.gettarinfo(file, arcname=os.path.basename(file))
            tarinfo.uid = uid
            tarinfo.gid = gid
            # 添加文件到tar归档中
            with open(file, "rb") as f:
                tar.addfile(tarinfo, f)

# 使用示例
files_to_archive = ["file1.txt", "file2.txt"]
create_tar_with_numeric_owner("archive.tar", files_to_archive)

在这个代码中,get_numeric_owner函数用于获取文件的UID和GID。然后,在创建tar文件时,我们为每个文件创建一个新的tarinfo对象,并手动设置其uidgid属性为数字形式。

请注意,这个方法假设你的系统能够通过UID和GID找到对应的用户和组。如果系统中没有这些用户和组的条目,那么即使使用了数字ID,tar文件中的所有者信息也可能是不完整的。

参考链接:

  • Python tarfile 模块文档: https://docs.python.org/3/library/tarfile.html
  • os.stat 函数文档: https://docs.python.org/3/library/os.html#os.stat
  • pwdgrp 模块文档: https://docs.python.org/3/library/pwd.html, https://docs.python.org/3/library/grp.html

如果你在使用这个方法时遇到任何问题,比如权限错误或者文件找不到等,请确保你有足够的权限来访问和读取目标文件,以及目标文件确实存在于指定的路径上。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【DB笔试面试511】如何在Oracle写操作系统文件,写日志?

题目部分 如何在Oracle写操作系统文件,写日志? 答案部分 可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。...image.png 其它常见问题如下表所示: 问题 答案 Oracle哪个包可以获取环境变量的值? 可以通过DBMS_SYSTEM.GET_ENV来获取环境变量的当前生效值。...在CLIENT_INFO列存放程序的客户端信息;MODULE列存放主程序名,包的名称;ACTION列存放程序包的过程名。该包不仅提供了设置这些列值的过程,还提供了返回这些列值的过程。...如何在存储过程暂停指定时间? DBMS_LOCK包的SLEEP过程。例如:“DBMS_LOCK.SLEEP(5);”表示暂停5秒。 DBMS_OUTPUT提示缓冲区不够,怎么增加?...如何在Oracle写操作系统文件,写日志? 可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。

28.8K30
  • Python处理压缩文件的终极指南

    在日常数据处理和文件管理,压缩文件是一种常见的文件格式。使用Python可以方便地自动化处理压缩文件,包括压缩和解压各种格式的文件,ZIP、TAR、GZ等。...丰富的库支持:Python有多个强大的库支持处理各种压缩文件格式,zipfile、tarfile、shutil等。...读取 TAR 文件 使用 tarfile 模块可以方便地读取TAR文件的内容。...import tarfile # 创建TAR文件 with tarfile.open('new_archive.tar', 'w') as tar_ref: # 向TAR文件添加文件...文中提供了丰富的示例代码,展示了如何在实际应用中使用这些模块进行文件备份和解压操作。掌握这些技术,不仅可以提高工作效率,还能简化日常文件管理任务。

    30410

    Python实现压缩和解压缩

    import osimport tarfile# 函数功能是tar_file_list所有文件,和tar_dir_list所有目录下的所有文件,被压缩到一个tar_file_name的压缩文件def...my_tar_function(tar_file_name, tar_file_list=[], tar_dir_list=[], model="w"): # 本来也应该是tarfile.TarFile...(tar_file_name, model)来创建的,但TarFile不支持"r:gz"等扩展形式 # 压缩文件最后需要close,为了方便我们直接用with with tarfile.open...tmp_dir)# 函数功能是遍历压缩文件的所有文件def my_traversal_tar_function(tar_file_name, model="r"): with tarfile.open...还支持gz/bz2/xz的压缩,只要在原来打开模式的基础上使用:或|接上压缩方法即可,"r:gz" # 特别的,如果是读取文件,可以使用"r:*"来指示尝试以任意格式读取 open_model

    6210

    python之shutil模块

    shutil:高级的 文件、文件夹、压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length])(copyfileobj方法只会拷贝文件内容) 将文件内容拷贝到另一个文件...只是文件名时,则保存至当前目录,否则保存至指定路径, :www                        =>保存至当前路径 :/Users/wupeiqi/www =>保存至/Users/wupeiqi...wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test') shutil 对压缩包的处理是调用 ZipFile 和 TarFile...# 压缩 tar = tarfile.open('your.tar','w') tar.add('/Users/wupeiqi/PycharmProjects/bbs2.log', arcname=...('your.tar','r') tar.extractall() # 可设置解压地址 tar.close() 备注:zipfile压缩不会保留文件的状态信息,而tarfile会保留文件的状态信息

    84710

    python shutil模块

    高级的 文件、文件夹、压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件,可以部分内容 test.txt是一个已经存在的文件...只是文件名时,则保存至当前目录,否则保存至指定路径, :www                        =>保存至当前路径 :/Users/wupeiqi/www =>保存至/Users/wupeiqi...shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细: zipfile 压缩解压 import zipfile # 压缩 z = zipfile.ZipFile...z.write('data.data') z.close() # 解压 z = zipfile.ZipFile('laxi.zip', 'r') z.extractall() z.close() tarfile...压缩解压 import tarfile # 压缩 tar = tarfile.open('your.tar','w') tar.add('/Users/wupeiqi/PycharmProjects

    48510

    用 Python 压缩文件方法汇总

    ---- 对于流行的文件压缩格式, tar 、zip 、gzip 、bz2 等,乃至于更奇特的 lzma 等格式,Python 都能轻易实现。本文将对有关压缩文件的问题给予阐述。...在这段代码,首先在 with 上下文管理,以 w 模式使用 ZipFile创建 ZIP 归档文件,然后将文件添加到归档文件。...然后将所有的文件添加到存档。使用 tarfile 模块,还可以传入符号链接(软连接)、或传入可以递归添加的整个目录。 接下来,为了确认所有文件都确实存在,我们使用 getmembers 方法。...tarfile 提供了一个我们在其他模块没有看到的很酷的特性,那就是在将文件添加到归档文件时能够修改文件的属性。...可以根据实际需要进行选择,通常建议使用通用模块, zipfile 或 tarfile ,只有在必要时才使用 lzma 之类的模块。 当然,要想熟练使用以上各个模块的各种方法,还是要阅读官方文档。

    2.9K10

    教你怎么用python操作文件

    如果你还想获取文件和目录属性(文件大小和修改日期),那么 os.scandir() 则是首选的方法。...如果 dst 是目录,则 src 将被复制到该目录。 shutil.copy() 仅复制文件的内容和文件的权限。 其他元数据(文件的创建和修改时间)不会保留。...以下示例说明如何在Python REPL检索有关已归档文件的更多详细信息。...下一行显示了如何在归档后获取文件的大小。 最后一行显示了存档文件 bar.py 的完整路径。 ZipFile 支持上下文管理器协议,这就是你可以将它与with语句一起使用的原因。...下面是从存档读取: import tarfile with tarfile.open('example.tar', 'r') as tar_file: print(tar_file.getnames

    6.5K20

    让Python在后台自动解压各种压缩文件

    模块解压文件 二、步骤分析和前置知识 码代码之前需要将复杂问题解释成多个明确的要求,即这个程序实现的逻辑为: 定时检测某个文件夹( download 文件夹)是否存在压缩文件 如果有新出现的压缩文件则将其解压到当前文件夹内的新文件夹...compressed_lst = ['gz', 'tar', 'zip', 'rar'] 目标文件夹下的所有文件名运行filename.split(.)[-1]获取后缀名 判断后缀名是否在compressed_lst,...如果存在则运行后续的解压代码 如果是以gz结尾的文件,解压后需要再次判断是否是以.tar结尾,并进行相应处理 不同压缩文件的解压代码各不相同,在后续代码操作具体展开。...处理.tar文件 import tarfile def untar(filename): tar = tarfile.open(filename) names = tar.getnames...dir") os.chdir(filename + "_dir") rar.extractall() rar.close() 可以看到,四种解压代码略有不同,推荐大家实际演示自己体会一下差别

    3.1K10

    python模块之shutil

    目标文件的路径 copytree() 功能:复制整个文件目录 格式:shutil.copytree(来源目录,目标目录) 返回值:目标目录的路径 注意:无论文件夹是否为空,均可以复制,而且会复制文件夹的所有内容...解压缩:就是压缩的反向操作,将压缩文件的多个文件,释放出来。 注意:压缩属于归档!...shutil.get_unpack_formats() 返回值:列表 [(后缀,解释),(后缀,解释),(后缀,解释)...] shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件...只是文件名时,则保存至当前目录,否则保存至指定路径, :www =>保存至当前路径 :/Users/wupeiqi/www =>保存至/Users...# 压缩 tar = tarfile.open('your.tar','w') tar.add('/Users/wupeiqi/PycharmProjects/bbs2.log', arcname=

    1.1K20

    让Python在后台自动解压各种压缩文件!

    ,每次下载压缩包形式的文件后,自动将内部文件解压到当前文件夹后将压缩包删除,通过本案例可以学到的知识点: os 模块综合应用 glob 模块综合应用 利用 gzip zipfile rarfile tarfile...模块解压文件 二、步骤分析和前置知识 码代码之前需要将复杂问题解释成多个明确的要求,即这个程序实现的逻辑为: 定时检测某个文件夹( download 文件夹)是否存在压缩文件 如果有新出现的压缩文件则将其解压到当前文件夹内的新文件夹...compressed_lst = ['gz', 'tar', 'zip', 'rar'] 目标文件夹下的所有文件名运行filename.split(.)[-1]获取后缀名 判断后缀名是否在compressed_lst,...如果存在则运行后续的解压代码 如果是以gz结尾的文件,解压后需要再次判断是否是以.tar结尾,并进行相应处理 不同压缩文件的解压代码各不相同,在后续代码操作具体展开。...处理.tar文件 import tarfile def untar(filename): tar = tarfile.open(filename) names = tar.getnames

    1.6K20

    Python 模版(二)

    六、shutil 高级的文件、文件夹、压缩包处理模块 shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件,可以部分内容 def copyfileobj...只是文件名时,则保存至当前目录,否则保存至指定路径,  :www                        =>保存至当前路径  :/Users/wulaoer/www =>保存至/Users/... to '%s'", save_cwd)             os.chdir(save_cwd)     return filename shutil 对压缩包的处理是调用 ZipFile 和 TarFile...) z.write('data.data') z.close() # 解压 z = zipfile.ZipFile('laxi.zip', 'r') z.extractall() z.close() tarfile...压缩解压 import tarfile # 压缩 tar = tarfile.open('your.tar','w') tar.add('/Users/wupeiqi/PycharmProjects/

    1.6K20
    领券