我有这样的目录结构
-- 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()
如果有人找到答案,这将很有帮助。
最佳答案
从文档中
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)
关于python - Python:如何通过排除第三个目录来使用tarfile模块获取tar,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23686963/