使用zip命令压缩目录时如何排除version和.htaccess文件及错误排查
解决Zip命令排除文件时的参数错误问题
我一眼就看出你遇到的问题出在参数顺序错误和**--exclude选项的用法不对**上,咱们一步步理清楚:
先看你原来的命令逻辑
你最初的命令是:
zip -r --exclude=*.html "${getFilePath('assets')}" "."
这里的参数结构是完全正确的:
-r:递归压缩目录--exclude=*.html:排除所有.html文件"${getFilePath('assets')}":这是你要生成的压缩包文件的路径/名称".":这是你要压缩的目标目录
你的错误命令哪里错了?
你改成的命令:
zip -r --exclude=*.html version .htaccess "${getFilePath('assets')}" "."
问题出在:你把version和.htaccess直接插在了选项和压缩包文件名之间!
Zip命令的规则是:选项之后,第一个非选项参数是压缩包文件名,后面的才是要压缩的文件/目录。所以你的错误命令里,Zip会把version当成要生成的压缩包名,.htaccess当成第一个要压缩的文件,后面的"${getFilePath('assets')}"和"."也变成了压缩对象,这种混乱的参数顺序直接导致了不可预期的行为(比如你说的图片被错误排除)。
正确的写法应该是这样
要添加多个排除规则,有两种靠谱的方式:
方式1:每个排除规则单独用--exclude指定
这是最通用的写法,兼容几乎所有Zip版本:
zip -r --exclude=*.html --exclude=version --exclude=.htaccess "${getFilePath('assets')}" "."
方式2:用逗号分隔多个排除模式(现代Zip版本支持)
如果你的Zip版本比较新(比如Info-ZIP的Zip),可以把多个排除模式用逗号分隔,放在同一个--exclude里:
zip -r --exclude='*.html,version,.htaccess' "${getFilePath('assets')}" "."
额外说明
因为你提到所有操作内容都在当前要压缩的assets目录下,这两个写法里的version和.htaccess会精准匹配该目录下的对应文件,不会误排除其他目录的内容,完全符合你的需求。
最后再强调一遍:别乱改Zip命令的参数顺序,压缩包文件名一定要紧跟在所有选项之后,后面再放要压缩的目录/文件,不然很容易出现各种奇怪的问题!
内容的提问来源于stack exchange,提问作者Jakub Hampl
相关产品推荐
相关产品推荐

