【问题标题】:Python: How to take tar using tarfile module by excluding the 3rd directoryPython:如何通过排除第 3 个目录来使用 tarfile 模块获取 tar
【发布时间】:2014-05-15 19:24:02
【问题描述】:

我有这样的目录结构

-- jenkins
|-- jobs
|   |-- dir1
|   |   |-- build_dir--
|   |   `-- Autoyes
|   |-- dir2
|   |   |-- build_dir--
|   |   `-- Manyes
|   |-- dir3
|   |   |-- ArtFict
|   |   `-- build_dir--
|   `-- hi
|-- tesst
`-- tets

我需要通过排除所有 dir1,dir2,dir3 和更多目录下的 "build_dir" 来使用 tarfile 模块获取 tar。 我可以在子进程中使用一个非常简单的 tar 语句来实现这个

tar --exclude="*/*/buid_dir" -czvf test.tgz jenkins

但我正在寻找一种pythonic 方式来实现这一点,到目前为止我所做的并不排除“build_dir”目录。

import tarfile
import os,sys
import subprocess

def ProcesS (input):
    Asub = subprocess.Popen (input,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    output,error = Asub.communicate()
    return output,error

A = ['jenkins', 'jenkins/jobs', 'jenkins/jobs/dir1', 'jenkins/jobs/dir1/build_dir', 'jenkins/jobs/dir2', 'jenkins/jobs/dir2/build_dir', 'jenkins/jobs/dir3', 'jenkins/jobs/dir3/build_dir']

Tar = tarfile.open('Backme.tgz','w:gz')

#Tar.add(A,exclude='*/*/build_dir')   #This throws the error

Tar.add(A)     # creates a tar file without excluding the build_dir 
Tar.close()

如果有人能找到答案,那将非常有帮助。

【问题讨论】:

    标签: python linux shell tarfile


    【解决方案1】:

    来自文档

    TarFile.add(name, arcname=None, recursive=True, exclude=None, filter=None)
    

    看起来您只需将其添加到排除项(您可能必须放置完整路径...)

    看起来像你

    tf = tarfile.open("sometar.tar","w")
    def excludes_fn(name):
        return "build" in name
    tf.add("/base/folder",exclude=excludes_fn)
    

    【讨论】:

    • 我试过你提到的方法。构建目录甚至完全排除在 jenkins/build 中。
    • 是的,您可能需要根据其他条件定义要排除的函数,然后是我的示例...
    猜你喜欢
    • 1970-01-01
    • 2012-07-01
    • 2022-11-10
    • 2014-01-17
    • 2013-12-27
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多