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

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

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

黄舟
黄舟

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

répondre à tous(2)
大家讲道理

TarFile.add(name, arcname=None, recursive=True, discover=None, *, filter=None)
Ajoutez le nom du fichier à l'archive. le nom peut être n’importe quel type de fichier (répertoire, fifo, lien symbolique, etc.). S'il est donné, arcname spécifie un nom alternatif pour le fichier dans l'archive. Les répertoires sont ajoutés de manière récursive par défaut. Cela peut être évité en définissant récursif sur False. Si l'exclusion est donnée, il doit s'agir d'une fonction qui prend un argument de nom de fichier et renvoie une valeur booléenne. En fonction de cette valeur, le fichier correspondant est soit exclu (True), soit ajouté (False). Si le filtre est spécifié, il doit s'agir d'un argument de mot-clé. Il doit s'agir d'une fonction qui prend un argument d'objet TarInfo et renvoie l'objet TarInfo modifié. S'il renvoie None, l'objet TarInfo sera exclu de l'archive. Voir Exemples pour un exemple.

Filtre pour filtre et filtre pour filtre, filtre pour TarInfo pour TarInfo et filtre pour tarinfo pour Tarinfo et 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)
左手右手慢动作

Fichier tar Python et exclusions
Veuillez vous y référer.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!