You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下无需解压原Zip,按模式提取文件到新Zip的方法

无需解压org.zip,直接提取匹配**/bin/*.o的文件到new.zip

有没有办法不用解压org.zip,直接把其中所有匹配**/bin/*.o模式的文件“复制”到new.zip中?

org.zip的内容:

$ unzip -l org.zip
Archive:  org.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  04-24-2023 20:13   org/
        8  04-24-2023 20:06   org/c.c
        0  04-24-2023 20:00   org/bin/
       12  04-24-2023 20:02   org/bin/a.o         <- wanted
       12  04-24-2023 20:05   org/bin/b.o         <- wanted
       12  04-24-2023 20:03   org/bin/c.o.        <- wanted
        8  04-24-2023 20:06   org/a.c
        8  04-24-2023 20:06   org/b.c
        0  04-24-2023 19:59   org/debug/
       14  04-24-2023 20:03   org/debug/a.o
       14  04-24-2023 20:03   org/debug/b.o
       14  04-24-2023 20:03   org/debug/c.o
---------                     -------
      102                     12 files

# 目标文件列表
$ unzip -Z1 org.zip  "**/bin/*.o"
org/bin/a.o
org/bin/b.o
org/bin/c.o

当前临时目录解法:

$ unzip -q -o org.zip '**/bin/*.o' -d ./tmp
$ ( cd ./tmp && zip -q -r - . ) > new.zip
$ rm -rf ./tmp

# 验证结果
$ unzip -l new.zip
Archive:  new.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  04-24-2023 20:20   org/
        0  04-24-2023 20:20   org/bin/
       12  04-24-2023 20:02   org/bin/a.o
       12  04-24-2023 20:05   org/bin/b.o
       12  04-24-2023 20:03   org/bin/c.o
---------                     -------
       36                     5 files

更优雅的流式处理方案

方案1:用bsdtar直接处理(推荐)

bsdtar支持跨压缩包直接筛选打包,全程无临时文件,命令简洁高效:

bsdtar -cf new.zip -f org.zip '*/bin/*.o'

执行后直接生成包含目标文件的new.zip,路径结构和原压缩包完全一致。

方案2:结合unzip和zip实现流式处理

如果只能用unzip和zip工具,可以用以下命令:

unzip -Z1 org.zip "**/bin/*.o" | xargs -I {} sh -c "unzip -p org.zip {} | zip new.zip --name {}"
  • unzip -Z1先列出所有匹配的文件路径
  • 每个路径通过xargs传递给子shell,用unzip -p输出文件内容
  • 最后用zip --name指定归档内的路径,把内容写入new.zip

这个方法虽然会为每个文件单独调用zip,但不需要临时目录,实现了流式处理的需求。

内容的提问来源于stack exchange,提问作者Marslo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 01:45:28