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 ... #n
curl
- 두 번째 숫자를 선택할 수도 있지만
-o "#2.mp3"
그렇게 하면 파일을 덮어쓰게 됩니다! 다운로드01ep1.mp3
및02ep1.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