중괄호 구문으로 여러 파일을 컬 다운로드


17

다음 구문으로 두 파일을 다운로드하려고합니다.

curl -O http://domain/path/to/{file1,file2}

문제는 첫 번째 파일 만 실제로 로컬에 저장되고 두 번째 파일은 단순히 표준 출력으로 인쇄된다는 것입니다.

추가하면 -O잘 작동 한다는 것을 알았습니다 .

curl -OO http://domain/path/to/{file1,file2}

그러나 파일 수가 너무 커지면 이것이 비현실적이지 않습니까? 예를 들어

curl -O http://domain/path/to/file[1,100]

내 질문은, curl정확한 수를 추가하지 않고 한 번에 여러 개의 개별 파일을 다운로드 할 수있는 방법이 실제로 -O없습니까?


1
for 루프를 사용하거나 대신 wget을 사용하지 않는 이유는 무엇입니까?
Rui F Ribeiro

1
@RuiFRibeiro (1) 예, 루프를 사용할 수 있습니다. 나는 단지 궁금하다면curl그것을 달성 할 수 합니다. (2) SFTP와 같은 HTTP, FTP 프로토콜뿐만 아니라 고려하고 있습니다.
Naitree

내 말은, 그렇게 강력한 도구라면 왜 curl그렇게 어려운 기능에서 실패했을까요?
Naitree

1
{}and [](및 *and ?) 구문이 globbing / expansion 이라는 것을 분명히하기 위해 , curl절대로 그것들을 보지 못합니다.curl url1 url2
vonbrand

wget은 SSL을 처리하지 않습니다
MikeW

답변:


9

업데이트 : 이것은 curl 7.19.0에서 구현되었습니다. @Besworks 답변을 참조하십시오.

매뉴얼 페이지에 따르면 여러 개의 O를 사용하는 것 외에는 원래 파일 이름을 유지할 수있는 방법이 없습니다. 또는 고유 한 파일 이름을 사용할 수 있습니다.

curl http://{one,two}.site.com -o "file_#1.txt"

결과 http://one.site.com에 저장되는 file_one.txthttp://two.site.com에 저장되고 file_two.txt.

또는 심지어 여러 변수

curl http://{site,host}.host[1-5].com -o "#1_#2"

~를 야기하는 http://site.host1.com 에 저장되고는 site_1, http://host.host1.com저장되고 host_1등등합니다.


또는 다음과 같은 작업을 수행 할 수 있습니다.curl -$(printf 'O%.0s' {1..3}) http://domain/path/to/{file1,file2,file3}
Max Coplan

23

나는이 질문에 이미 받아 들여진 대답이 있다는 것을 알고 있지만 실제로 이것을 할 수있는 방법이 있음을 지적해야한다고 생각합니다.

그만큼 --remote-name-all 옵션은 curl을 사용하는 것처럼 -O또는 --remote-name각 파일에 대해 동작하도록 지시 합니다.

https://curl.haxx.se/docs/manpage.html#--remote-name-all

이 옵션은 버전 7.19.0 이후에 사용 가능합니다

https://curl.haxx.se/changes.html#7_19_0


0

curl을 사용하여 여러 파일을 다운로드하는 다른 방법이 있습니다.

urls="firstUrl secondUrl thirdUrl" 
for url in $urls
do
   curl -O "$url"
done

참고 : 필수 공백은 다른 URL을 구분하는 데 사용됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.