여러 범위로 cURL 다운로드

여러 범위로 cURL 다운로드

cURL을 사용하여 일련의 팟캐스트 에피소드를 다운로드하려고 합니다. 일련의 숫자를 사용하여 패턴과 일치하는 여러 파일을 다운로드하는 방법을 알고 있지만 단일 URL에 여러 범위를 갖는 방법을 모르겠습니다.

예시 URL:

http://www.example.com/01_episode_1.mp3
http://www.example.com/02_episode_2.mp3
http://www.example.com/03_episode_3.mp3
...
http://www.example.com/52_episode_52.mp3

내가 사용한다면

curl -O http://www.example.com/[01-52]_episode_[1-52].mp3

다음과 같은 파일을 얻습니다.

01_episode_1.mp3
01_episode_2.mp3
01_episode_3.mp3
...
01_episode_52.mp3
02_episode_1.mp3
02_episode_2.mp3
02_episode_3.mp3
...
02_episode_52.mp3
03_episode_1.mp3
03_episode_2.mp3
03_episode_3.mp3
...
03_episode_52.mp3
etc...

그러나 대부분은 분명히 유효한 파일이 아닙니다.

cURL을 사용하여 원하는 파일을 어떻게 가져올 수 있나요? 아니면 작업에 잘못된 도구를 사용하려고 하는 것일까요?

이것은 OS X 10.10.3에 있으며 모든 버전의 cURL은 해당 플랫폼에 기본적으로 설치됩니다.

답변1

curl이 특별한 경우에 대한 솔루션은 약하지만 유사한 문제인 함수 범위 글로빙 에서는 매우 유용합니다 . 다른 사람들도 그럴 수 있도록 나는 이 스레드를 우연히 발견했습니다.

curl http://www.example.com/[01-52]_episode_[1-52].mp3 -o "ep#1_#2.mp3"
find . type -f -empty -delete

설명하기:

  • curl범위 와일드카드 기능 사용
  • 두 개가 있기 때문에 루프보다 약합니다.거의 같다실제로는 동일한 범위를 의미합니다(첫 번째 -의 앞에 오는 0을 제외하고).
  • 로컬 이름 사용을 -o지원 하고 범위 와일드카드 사용 시 파일 저장 기능을 표시하려면 선택합니다 .-O#1 #2 ... #ncurl
  • 두 번째 숫자를 선택할 수도 있지만 -o "#2.mp3"그렇게 하면 파일을 덮어쓰게 됩니다! 다운로드 01ep1.mp302ep1.mp3저장1.mp3
  • example.com에서 테스트하면 페이지가 항상 200과 동일한 페이지로 응답하기 때문에 이상한 결과가 나타납니다. 아시다시피 이것이 IANA 설정 방법입니다.
  • 기능 문서:https://ec.haxx.se/cmdline-globbing.html
  • find최대범위를 모르니 여기로 전화주세요
  • 이렇게 하면 모든 파일이 저장됩니다. 범위가 [1-10]이고 페이지 1과 2만 있는 경우 페이지 3-9(포함)에 대해 빈 파일이 저장됩니다. 따라서 find . -empty -delete빈 파일을 삭제합니다. 물론 위의 문제로 인해example.com웹사이트는 그곳에서는 작동하지 않습니다.

답변2

어때요?

for i in {1..52}; do curl -O `printf "http://www.example.com/%02d_episode_%d.mp3" $i $i`; done

관련 정보