Когда я выполняю команду
zip -r --include '*.rb' '*.sh' '*.zsh' '*irb*' tmp/small_v.zip bin
, я получаю сообщение об ошибке zip error: Invalid command arguments (не из чего выбирать)
Если я напишу команду как
zip -r tmp/small_v.zip bin --include '*.rb' '*.sh' '*.zsh' '*irb*'
, она сработает. Почему? Просматривая справочную страницу zip (в частности, параметр --include), я нахожу:
Хотя использовался синтаксис команды, требующий -i в конце командной строки, эта версия фактически позволяет -i ( или --include) где угодно . Список файлов заканчивается следующим аргументом, начинающимся с -, конца командной строки или списка. терминатор @ (аргумент, который просто @).
Из этого я бы сделал вывод, что обе версии команды должны работать.
Я использую zip 3.0 на MacOS Sierra.
Важной частью в этом случае является
Список файлов заканчивается следующим аргументом, начинающимся с
-
, концом командной строки или знаком конца списка@
(аргумент, который равен просто@
).
При записи
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)
.
это немного странно, и я не `не проводил глубоких исследований, но мне нужно было использовать
zip -r --include="server_*"...
включить файлы, начинающиеся с sth, чтобы это работало в настройке CI/CD