Bash

2 個相同範圍的 Bash 大括號擴展

  • March 2, 2021

我想通過以下方式下載一堆編號的文本文件:

curl https://www.grc.com/sn/sn-{472..807}.txt > sn-{472..807}.txt

但這給了我:

bash:sn-{472..807}.txt:不明確的重定向

所以我最終做了一個:

for iEpisode in {472..807}; do
   curl https://www.grc.com/sn/sn-"$iEpisode.txt" > sn-"$iEpisode.txt"; 
   if [[ $? -eq 1 ]]; then exit; fi;
done

問題是:有沒有辦法做一個簡單 curl 的雙括號擴展?

(因為它對我來說並不模棱兩可,而且我的 Google-fu 無處可尋) :/

這是模棱兩可的,因為您正在嘗試重定向到多個文件。你的外殼會選擇哪個?

一般來說,您將需要for循環,但使用 Curl 您可以使用

curl --remote-name-all https://www.grc.com/sn/sn-{472..807}.txt

該選項就像-O(請參閱手冊頁),

-O, –remote-name

將輸出寫入本地文件,其名稱與我們獲得的遠端文件類似。(僅使用遠端文件的文件部分,路徑被截斷。)

但它適用於每一個論點。

Curl 也理解 shell-like 範圍:

curl -O 'https://www.grc.com/sn/sn-[472-807].txt'

引用自:https://unix.stackexchange.com/questions/637138