2개의 동일한 범위에 대한 Bash 버팀대 확장

2개의 동일한 범위에 대한 Bash 버팀대 확장

다음을 통해 번호가 매겨진 여러 텍스트 파일을 다운로드하고 싶습니다.

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}.txtsn-472.txt... sn-807.txt"안녕하세요"가 포함되어 있기를 바랍니다 .

이것은 Zsh에서 작동합니다, 하지만 Bash에서는 그렇지 않습니다.

하지만 어쨌든 여전히 출력 스트림은 하나만 있으므로 curl다음과 같습니다.

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

그러면 컬이 다운로드한 각 파일을 동일한 스트림으로 출력하게 되고 Zsh는 해당 스트림의 전체 세트를 각 출력 파일에 복사합니다.

루프를 사용하여 명시적으로 지정하지 않는 한 쉘은 여러 인수를 사용하여 한 번만 실행하는 것이 아니라 유사한 작업을 여러 번 실행할지 실제로 결정할 수 없습니다.

관련 정보