压缩Project文件夹时如何排除node_modules除mydir外的所有内容?
解决zip压缩时保留node_modules指定子目录的问题
问题分析
你之前使用的zip -r project.zip Project/ -x Project/node_modules/*会把node_modules下所有直接子项(包括mydir)一并排除——因为通配符*匹配了该目录下的所有内容,最终导致整个node_modules目录都未被压缩。
高效解决方案
不需要逐个排除node_modules下的其他子目录,以下两种单次压缩的方法就能满足需求:
方法1:利用bash扩展匹配(extglob)
先开启bash的扩展匹配功能(默认可能未开启),然后一次性排除node_modules下除mydir外的所有内容:
# 开启扩展匹配 shopt -s extglob # 执行压缩 zip -r project.zip Project/ -x "Project/node_modules/!(mydir)"
!(mydir)是bash扩展匹配语法,表示“除了mydir之外的所有内容”,能精准保留node_modules/mydir及其内容,排除其他子目录和文件。
方法2:结合-x和-i参数
先排除node_modules下的所有内容,再强制包含mydir及其所有子项:
zip -r project.zip Project/ -x "Project/node_modules/*" -i "Project/node_modules/mydir/**"
**用于匹配mydir下的所有层级文件和子目录,确保整个mydir的目录结构都被正确包含进压缩包。
注意事项
- 方法1仅适用于bash环境,zsh等其他shell的扩展匹配语法可能不同;
- 命令中的路径需与实际目录结构对应,避免因路径错误导致匹配失败。
内容的提问来源于stack exchange,提问作者hawe25
相关产品推荐
相关产品推荐

