команды pipe внутри поиска -exec?

.* следует [^-_./0-9a-zA-Z] - и он не является необязательным. Поэтому что-то, кроме одного из этих символов (алфавиты, цифры, -, _, . и /) должны встречаться в имени файла один раз. Любой путь, состоящий только из этих символов, не будет напечатан.

Поэтому эти команды не обязательно должны выводить одинаковые результаты.

1
18.03.2019, 19:32
2 ответа

Вы можете использовать jqдля получения объектов 'keyData', а затем передать их вwhile read:

jq -c '.responses[].keyData' file.json

{"algorithm":13,"flags":257,"protocol":3,"publicKey":"a1"}
{"algorithm":13,"flags":257,"protocol":3,"publicKey":"a4"}
{"algorithm":13,"flags":257,"protocol":3,"publicKey":"fa4"}

И оттуда:

jq -c '.responses[].keyData' file.json | 
while read keydata; do curl --data "'$keydata'" http://example.com/service ; done

Если ввести исходную команду curl, весь конвейер будет выглядеть так:

curl -v -X POST --data '{ "authToken": ".......", "clientTransactionId": "",}' https:/domain.tld/api/v1/json/keysList | 
jq -c '.responses[].keyData' file.json | 
while read keydata; do curl --data "'$keydata'" http://example.com/service ; done

Не забудьте изменить вторую команду curlс фактическим URL-адресом, параметрами и т. д. перед выполнением. Если необходимо, вы можете добавить оператор echo/ printfперед командой curl, чтобы увидеть, как будет выглядеть ваш запрос.

3
27.01.2020, 23:22

в качестве альтернативы вы можете использовать утилиту unixjtcдля просмотра keyData:

bash $ <file.json jtc -w'[responses][:][keyData]' -r
{ "algorithm": 13, "flags": 257, "protocol": 3, "publicKey": "a1" }
{ "algorithm": 13, "flags": 257, "protocol": 3, "publicKey": "a4" }
{ "algorithm": 13, "flags": 257, "protocol": 3, "publicKey": "fa4" }
bash $ 

и подайте его для завивки:

bash $ <file.json jtc -w'[responses][:][keyData]' -r | while read keydata; do curl --data "'$keydata'" http://example.com/service ; done
0
27.01.2020, 23:22

Теги

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