当我执行命令时
zip -r --include '*.rb' '*.sh' '*.zsh' '*irb*' tmp/small_v.zip bin
我收到错误消息zip 错误:命令参数无效(没有可供选择的内容)
如果我将命令写为
zip -r tmp/small_v.zip bin --include '*.rb' '*.sh' '*.zsh' '*irb*'
有用。为什么?查看 zip 手册页(特别是 --include 选项),我发现:
尽管命令语法过去需要在命令行末尾添加 -i,但此版本 实际上允许-i(或--include)在任何地方。文件列表在下一个以 - 开头的参数、命令行末尾或列表终止符 @(仅是 @ 的参数)处终止。
由此,我得出结论,该命令的两个版本都应该有效。
我正在使用在 MacOS Sierra 上运行的 zip 3.0。
答案1
本例中重要的部分是
文件列表在下一个以 开头的参数
-
、命令行末尾或列表终止符@
(仅是 的参数@
)处终止。
当你写的时候
zip -r --include '*.rb' '*.sh' '*.zsh' '*irb*' tmp/small_v.zip bin
tmp/small_v.zip
和bin
被视为提供给 的文件--include
,因此该zip
命令最终没有目标文件,也没有要处理的文件。
--include
能可以放在任何地方,但它的论点仍然必须有意义,并且其余论点必须是可识别的。你可以将你的命令写为
zip --include '*.rb' '*.sh' '*.zsh' '*irb*' -r tmp/small_v.zip bin
相反,使用-r
参数来标识 的文件列表的末尾--include
,或使用@
来终止列表:
zip -r --include '*.rb' '*.sh' '*.zsh' '*irb*' @ tmp/small_v.zip bin
--include
本节末尾有非常相似的示例联机zip(1)
帮助页。
答案2
这有点奇怪,我没有进行深入研究,但我需要使用
zip -r --include="server_*" ...
包含以 sth 开头的文件,使其在 CI/CD 设置上运行