【发布时间】:2019-12-16 22:28:38
【问题描述】:
我正在使用 Python 3 和 tarfile 模块来压缩一些文件夹(带有子文件夹)。我需要做的:设置几个子文件夹从最终的 tar 文件中排除。
例如,假设我的文件夹看起来像:
dir/
├── subdirA
│ ├── subsubdirA1
│ │ └── fileA11.txt
│ │ └── fileA12.txt
│ ├── subsubdirA2
│ │ └── fileA21.txt
│ │ └── fileA22.txt
│ └── fileA.txt
├── subdirB
│ ├── subsubdirB1
│ │ └── fileB11.txt
│ │ └── fileA12.txt
│ ├── subsubdirB2
│ │ └── fileB21.txt
│ │ └── fileB22.txt
│ └── fileB.txt
└── main.txt
现在,我说我想在dir/ 中包含除subsubdirA2 和subsubdirB2 的内容之外的所有内容。基于this answer,我试过了:
EXCLUDE_FILES = ['/subdirA/subsubdirA2', '/subdirB/subsubdirB2']
mytarfile.add(..., filter=lambda x: None if x.name in EXCLUDE_FILES else x)
或者:
EXCLUDE_FILES = ['/subdirA/subsubdirA2/*', '/subdirB/subsubdirB2/*']
mytarfile.add(..., filter=lambda x: None if x.name in EXCLUDE_FILES else x)
或者:
EXCLUDE_FILES = ['/subdirA/subsubdirA2/*.*', '/subdirB/subsubdirB2/*.*']
mytarfile.add(..., filter=lambda x: None if x.name in EXCLUDE_FILES else x)
我还尝试了上述三个选项的变体,其中子文件夹路径开始时没有 / 或 dir 或 /dir。没有任何效果 - 一直以来,dir 中的所有内容都包括在内。
如何正确地从我想要生成的 tar 文件中排除特定的子文件夹?如果需要不同的模块/库而不是 tarfile,那很好。
【问题讨论】:
-
适用于 linux??...因为可能与子进程(shell 库)和 python 可以工作
-
我认为
x.name与EXCLUDE_FILES列表中的任何项目都不匹配,因为/file/path/*被视为名称为*的文件而不是正则表达式匹配 -
@saurjog 但这不适用于我给出的其他示例,对吧?
-
@JorgetMillani,为迟到的回复道歉。请看下面我的回答。我之前的评论适用于您给出的所有示例。
标签: python python-3.x tar subdirectory tarfile