![2개의 동일한 범위에 대한 Bash 버팀대 확장](https://linux55.com/image/188977/2%EA%B0%9C%EC%9D%98%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%EB%B2%94%EC%9C%84%EC%97%90%20%EB%8C%80%ED%95%9C%20Bash%20%EB%B2%84%ED%8C%80%EB%8C%80%20%ED%99%95%EC%9E%A5.png)
다음을 통해 번호가 매겨진 여러 텍스트 파일을 다운로드하고 싶습니다.
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에서는 그렇지 않습니다.
하지만 어쨌든 여전히 출력 스트림은 하나만 있으므로 curl
다음과 같습니다.
zsh% curl https://www.grc.com/sn/sn-{472..807}.txt > sn-{472..807}.txt
그러면 컬이 다운로드한 각 파일을 동일한 스트림으로 출력하게 되고 Zsh는 해당 스트림의 전체 세트를 각 출력 파일에 복사합니다.
루프를 사용하여 명시적으로 지정하지 않는 한 쉘은 여러 인수를 사용하여 한 번만 실행하는 것이 아니라 유사한 작업을 여러 번 실행할지 실제로 결정할 수 없습니다.