python - 如何使用tarfile实现目录过滤的打包文件
黄舟
黄舟 2017-04-18 09:19:38
0
2
512

如何在不使用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 

可以发现目录下完全没有文件。

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

membalas semua(2)
大家讲道理

TarFile.add(name, arcname=None, recursive=True, exclude=None, *, filter=None)
Tambahkan nama fail pada arkib. nama mungkin apa-apa jenis fail (direktori, fifo, pautan simbolik, dll.). Jika diberikan, arcname menentukan nama alternatif untuk fail dalam arkib. Direktori ditambah secara rekursif secara lalai. Ini boleh dielakkan dengan menetapkan rekursif kepada Palsu. Jika exclude diberikan, ia mestilah fungsi yang mengambil satu argumen nama fail dan mengembalikan nilai boolean. Bergantung pada nilai ini, fail masing-masing sama ada dikecualikan (Benar) atau ditambah (Salah). Jika penapis dinyatakan, ia mestilah hujah kata kunci. Ia mestilah fungsi yang mengambil hujah objek TarInfo dan mengembalikan objek TarInfo yang diubah. Jika ia sebaliknya mengembalikan Tiada objek TarInfo akan dikecualikan daripada arkib. Lihat Contoh untuk contoh.

利用penapis参数设定penapis函数,penapis函数接收TarInfo对象,在penapis函数内判断tarinfo对象的类型子的类型子要求就不返回传入的对象。

import tarfile
exclude_names = ['proc', 'lost+found', 'mnt', 'sys', 'media']
def filter_func(tarinfo):
    if tarinfo.name in exclude_names and tarinfo.isdir():
        return None
    else:
        return tarinfo
t = tarfile.open("/media/sda7/backup.tgz", "w:gz")
t.add("/", filter=filter_func)
左手右手慢动作

Python tarfile dan tidak termasuk
Sila rujuk padanya.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!