我有一个主文件夹,里面有很多文件夹,每个文件夹里都有许多不同的文件。我的目标是创建一个存档,其中只有一部分子文件夹,仅包含具有特定扩展名的文件。假设您有此结构,其中 A 是主文件夹,B、C 和 D 是其子文件夹。
A
--> B(foo.png,bar.png,ret.jpg)
--> C(示例.png)
--> D (fritz.png)
我想要的是:
存档.7z
--> B (foo.png,bar.png)
--> C(示例.png)
我在 Linux 下,找不到办法做到这一点。有什么提示吗?我试过这个
7z 存档.7z -ir!A/B*.png -ir!A/C*.png
但只压缩名称以 B 或 C 开头的文件。
答案1
A一般的方法是将A
原始内容的子集复制到另一个位置。然后将副本作为一个整体存档(压缩)。
提示:
- 可以使用专为备份设计的工具进行复制(例如
rsync
),该工具提供包含和/或排除文件或目录树的选项。 - 如果可能的话,创建硬链接而不是独立副本。这需要在同一个文件系统内进行操作。
- 复制/硬链接超出您需要的内容,然后删除多余的文件(可能手动)是一种有效的方法。
有用的命令(不一定完全可移植):
cp -lr A/ B
– 递归复制目录,硬链接文件。find B/ -type f ! -iname '*.png' -delete
*.png
– 删除除(不区分大小写匹配)之外的所有文件B/
。find B/ -type d -empty -delete
– 删除空目录。rm -r B/garbage/
– 删除不需要的目录及其内容。
7z
这种方法没有什么特别之处。它可以与任何归档器配合使用。
答案2
虽然距离原始帖子已过去 2 年,但如果有人来到这里,我仍会提供我的答案。
请注意,这7z a
将扫描并添加当前目录下的文件。假设当前目录是 A 的父目录,OP 的代码将如下所示:
7z a archive.7z -ir\!A/B/*.png -ir\!A/C/*.png
更一般地,我们还可以包含每个 .png 文件,但不包括-x
名为 D 的任何子文件夹:
7z a output.zip -ir\!*.png -xr\!*/D/
等等通配符的组合,希望对您有所帮助。