创建包含一些子文件夹的 7z 档案,保留目录结构并仅包含具有特定扩展名的文件

创建包含一些子文件夹的 7z 档案,保留目录结构并仅包含具有特定扩展名的文件

我有一个主文件夹,里面有很多文件夹,每个文件夹里都有许多不同的文件。我的目标是创建一个存档,其中只有一部分子文件夹,仅包含具有特定扩展名的文件。假设您有此结构,其中 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/

等等通配符的组合,希望对您有所帮助。

相关内容