如何使用tarfile实现目录过滤的打包文件
如何在不使用python调用shell的情况下,就是不使用subprocess,os.system等调用tar命令情况下,使用python标准库的tarfile实现tar中--exclude
的效果,例如:
tar -cvpzf /media/sda7/backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/sys --exclude=/media /
这里对目录/
下的/proc
,/lost+found
,/mnt
,/sys
及/media
目录进行过滤,并其结果打包在/media/sda7/backup.tgz
文件中。
下面的解决方案是可以的,但是对于/home/sky目录下的文件打包就不可以了:
#!/usr/bin/env python
import tarfile
exclude_names = ['build']
def filter_func(tarinfo):
if tarinfo.name not in exclude_names and tarinfo.isdir():
return None
else:
return tarinfo
t = tarfile.open("backup.tgz", "w:gz")
t.add("/home/sky", filter=filter_func)
比如我在sky目录下有1个build目录,只对其进行打包的话,结果如下:
sky@debian:~$ tar -tvf backup.tgz
可以发现目录下完全没有文件。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
利用filter参数设定filter函数,filter函数接收TarInfo对象,在filter函数内判断tarinfo对象的类型和名字,如果不符合要求就不返回传入的对象。
Python tarfile and excludes
参考一下。
exclude_names 列表中写成‘home/sky/build’ 才可以针对build打包