Добавить все файлы в каталоге в качестве аргументов cli

Я использовал сертификат, построенный на другом контексте, перезапустил Apache, ошибки не показывались.

Это означает, что ошибка должна быть связана с сертификатом.

Принимая это во внимание, я -внимательно следил за процедурой, которую использовал для построения центра сертификации. (Я добавлю процедуру внизу этого ответа )и обнаружил ошибку.

Я использовал "временный" сертификат вместо cacert.pem.


Процедура создания ЦС:

  1. openssl genrsa -des3 -out /etc/pki/CA/private/cakey.pem

  2. openssl req -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/ca.crt

  3. openssl x509 -req -days 100 -in ca.crt -out cacert.pem -signkey private/cakey.pem

2
25.01.2021, 20:25
3 ответа

Использование массива:

unset -v args
declare -a args
for file in *.zip
do
  args+=( --file "$file" )
done
mycli "${args[@]}"

Или, POSIXly:

set --
for file in *.zip
do
  set -- "$@" --file "$file"
done
mycli "$@"

Или, если использовать инструменты GNU:

find. -maxdepth 1 -name '*.zip' -printf '--file\0%f\0' |
  xargs -0 -- mycli

Существенная разница между подходом на основе массива -и подходом на основеxargs-:, в то время как первый может завершиться ошибкой "Слишком длинный список аргументов" (, предполагая mycliне является встроенной командой ), последняя не будет, а вместо этого будет выполняться mycliболее одного раза. Однако обратите внимание, что в этом последнем случае все списки аргументов, кроме последнего вызова, могут заканчиваться на --file(, а следующий начинается с имени файла ). В зависимости от вашего варианта использования вы можете использовать комбинацию xargs' вариантов (, например. -nи -x), чтобы предотвратить это.

Кроме того, обратите внимание, что findбудет включать в свой вывод скрытые файлы , в то время как альтернативы на основе массива -не будут, если только параметр оболочки dotglobне установлен в Bash или, в В оболочке POSIX используются выражения подстановки *.zipи .*.zip. Для получения подробной информации и предостережений по этому поводу :Как переместить все файлы (, включая скрытые ), из одного каталога в другой? .

5
18.03.2021, 22:35

Предполагая, что у вас не много тысяч файлов (, это вызовет ошибку «Слишком длинный список аргументов» ), тогда вы можете сделать то же самое с оболочкой zsh:

mycli./*.zip(P:--file:)

Или из оболочки bash:

zsh -c 'exec mycli./*.zip(P:--file:)'

(Я использую execздесь, чтобы заменить оболочку zshпроцессом mycliдля большей эффективности.)

Квалификатор подстановки имени файла Pдобавляет заданную строку (здесь,--file)как отдельное слово перед каждым элементом, до которого расширяется подстановка.

Чтобы включить скрытые файлы, добавьте Dперед P, а чтобы ограничить сопоставление только обычными файлами, добавьте.:

zsh -c 'exec mycli./*.zip(.DP:--file:)'

Для рекурсивного перемещения по подкаталогам:

zsh -c 'exec mycli./**/*.zip(.DP:--file:)'

... и чтобы упорядочить файлы в порядке временной метки модификации (, если вы хотите сделать это ), добавьте om, как вы добавляли Dи .ранее.

3
18.03.2021, 22:35

это работает:

ls *.zip | xargs printf "--file %s " | xargs echo mycli

Как только вы будете удовлетворены результирующей командой, удалите echoво втором xargsи повторите -запуск.

Если у вас есть zip-файлы, имя которых содержит пробелы или другие метасимволы оболочки, все немного сложнее.

1
18.03.2021, 22:35

Теги

Похожие вопросы