curl загрузить все файлы в каталог с помощью одной команды curl?

#bash #curl

Вопрос:

Я ищу, чтобы загрузить загрузку файла данных из нескольких частей/форм. Я работаю над заданием circleci, чтобы автоматически развернуть пару файлов определенного типа за один раз.

Это решение работает, но оно выполняет отдельный вызов curl для каждого файла.

 cd ~/project;find . -name "*.txt*" -type f -exec curl -k -H "Accept: application/json" -H "Authorization: Bearer $bearertoken" -F "deployment-name=${CIRCLE_SHA1:0:7}" -F "deployment-source=circleci" -F "enable-duplicate-filtering=false" -F "deploy-changed-only=true" -F "{}=@{}" http:www.blah.com  ;
 

Мне интересно, есть ли способ, которым я могу создать список файлов всех файлов в каталоге, а затем использовать эту переменную в одной загрузке curl.

Комментарии:

1. Это зависит от того, разрешает ли сценарий, который вы отправляете, несколько загрузок.

2. Да, он поддерживает несколько файлов в одном обновлении. Например, это будет работать так-F «./file1=@./file1.txt» -F «./file2=@./file2.txt

Ответ №1:

Используйте цикл для создания массива чередующихся -F и filename=@filename . Затем подставьте массив в команду curl.

 files=()
while read -r filename; do
    files =(-F "$filename=@$filename")
done < <(find . -name '*.txt' -type f)

curl -k -H "Accept: application/json" -H "Authorization: Bearer $bearertoken" "${$files[@]}" -F "deployment-name=${CIRCLE_SHA1:0:7}" -F "deployment-source=circleci" -F "enable-duplicate-filtering=false" -F "deploy-changed-only=true" "${$files[@]}" http:www.blah.com
 

Комментарии:

1. Наверняка есть лишний $ в "${$files[@]}"

2. Это именно то, что я хотел сделать. Спасибо. внес некоторые небольшие изменения в мои сценарии.