
次のように番号付きの複数のテキストファイルをダウンロードしたいと思います。
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が役に立たなかったため) :/
答え1
複数のファイルにリダイレクトしようとしているので、これはあいまいです。あなたのシェルはどれを選ぶでしょうか?
通常、ループを実行する必要がありますfor
が、Curlでは次のことができます。
curl --remote-name-all https://www.grc.com/sn/sn-{472..807}.txt
このオプションは次のとおりです-O
(参照マニュアルページ)、
-O、--リモート名
取得したリモートファイルと同様の名前のローカルファイルに出力を書き込みます。 (リモートファイルのファイル部分のみを使用し、パスは切り捨てられます。)
しかし、すべての主張に適用します。
Curlはシェルに似た範囲も理解しています。
curl -O 'https://www.grc.com/sn/sn-[472-807].txt'
答え2
echo hello > sn-{472..807}.txt
sn-472.txt
...sn-807.txt
「こんにちは」が含まれていることを願っています。
これはZshで動作しますしかし、Bashではそうではありません。
しかし、とにかくまだ出力ストリームは1つしかないのでcurl
、
zsh% curl https://www.grc.com/sn/sn-{472..807}.txt > sn-{472..807}.txt
これにより、カールがダウンロードした各ファイルを同じストリームに出力し、Zshはそのストリームの完全なセットを各出力ファイルにコピーします。
ループを使用して明示的に指定しない限り、シェルは複数の引数を使用して一度だけ実行するのではなく、同様の操作を複数回実行するかどうかを実際に決定することはできません。