Python:如何使用tarfile模块打包时排除第三个目录
我有这样的文件夹结构:
-- jenkins
|-- jobs
| |-- dir1
| | |-- build_dir--
| | `-- Autoyes
| |-- dir2
| | |-- build_dir--
| | `-- Manyes
| |-- dir3
| | |-- ArtFict
| | `-- build_dir--
| `-- hi
|-- tesst
`-- tets
我想用tarfile模块来打包一个tar文件,但要把所有dir1、dir2、dir3及其他文件夹下的"build_dir"排除在外。
我可以用一个很简单的tar命令在子进程中做到这一点:
tar --exclude="*/*/buid_dir" -czvf test.tgz jenkins
但是我想用更“python风”的方式来实现,目前为止我做的还没有把“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()
如果有人能找到这个问题的答案,那就太好了。
1 个回答
0
根据文档的内容
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)