2016-08-10 2 views
3

Existe-t-il un moyen d'exclure certains répertoires enfants de shutil.make_archive ou d'ajouter des répertoires à une seule archive via shutil?Création d'archive avec shutil.make_archive() en excluant certains chemins

exemples sont amusants:

/root 
    /workingDir 
     /dir1 
     /dir2 
      /dirA 
      /dirB 
     /dir3 

Supposons que je voulais créer une archive à l'intérieur workingDir qui comprenait tout sauf pour dirA - comment pourrais-je faire cela? Est-il possible sans écrire une méthode pour parcourir l'arbre entier?

Répondre

1

Je ne pense pas que ce soit possible avec directement avec shutil. Il est possible de le faire avec tarfile (qui est utilisé par shutil en interne de toute façon)

Tarfile.add a un argument de filtre que vous pouvez utiliser précisément dans ce but.

Voir aussi cette réponse: Python tarfile and excludes

EXCLUDE_FILES = ['dir2/dirA'] 
tar = tarfile.open("sample.tar.gz", "w:gz") 
tar.add("workingDir", filter=lambda x: None if x.name in EXCLUDE_FILES else x) 
tar.close()