我有一個 url 陣列,例如(來自 jq 呼叫):
["https://example.com/text.txt", "https://example.com/text2.txt", "https://example.com/text3.txt"]
如何遍歷這個并將這些網址中的每一個卷曲到當前檔案夾中?
編輯:
for link in $(jq -c 'xxxx' file.txt); do
echo "$link"
done
uj5u.com熱心網友回復:
如果您正在呼叫命令,要獲取鏈接串列,您可以簡單地迭代命令的結果,例如:
for link in "$(jq <args...>)"; do
# do something here
done
或者:
while read -r link; do
# do something here
done <<< $(jq <args...>)
uj5u.com熱心網友回復:
由于 JSON 陣列是“來自 jq 呼叫”,只需讓 jq 將其輸出為原始文本 url 串列 using.[]和-r選項,然后將該串列通過管道傳輸到xargsusing curl。
jq -r '… | .[]' | xargs -I{} curl -O {}
如果您無法修改原始 jq 過濾器,請在您的管道中插入另一個對 jq 的呼叫:
… | jq -r '.[]' | xargs -I{} curl -O {}
uj5u.com熱心網友回復:
將以下內容添加到 jq 代碼的末尾,然后通過管道sh運行它:
jq -r '[ "curl", .[] ] | @sh' | sh
@sh過濾器正確地轉義 shell 的輸出單個 shell 命令是一個陣列/串列,由空格分隔:
cmd opts ... args ...,并且 curl 可以采用多個 URL 引數。因此,在 jq 中,您可以將
curl命令(和任何選項)作為陣列中的額外元素添加,并通過 過濾@sh,以生成正確參考的 shell 命令。請注意,JSON 陣列中元素的順序被保留,這是我們想要的 -
curl首先。您可以在沒有管道的情況下運行 jq 來檢查將執行的內容:
例如:
echo '["https://example.com/text.txt", "https://example.com/text2.txt", "https://example.com/text3.txt"]' |
jq -r '[ "curl", .[] ] | @sh'
應該產生:
'curl' 'https://example.com/text.txt' 'https://example.com/text2.txt' 'https://example.com/text3.txt'
周圍的報價curl很好。此輸出可以通過管道(在 shell 中)傳送到sh, 以執行。
uj5u.com熱心網友回復:
這將在當前目錄中創建 3 個檔案:
echo '["https://example.com/text.txt", "https://example.com/text2.txt", "https://example.com/text3.txt"]' | jq '.[]' | xargs -n 1 curl -O
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/459353.html
上一篇:PHPcurl不適用于保管箱OAuth,回傳“無效請求”
下一篇:cacert選項和行程替換
