
다음 구문을 통해 두 개의 파일을 다운로드하려고 합니다.
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
답변2
이것은 컬 7.19.0에서 구현되었습니다. @Besworks의 답변을 참조하세요.
매뉴얼 페이지에 따르면 여러 s를 사용하는 것 외에는 원래 파일 이름을 보존할 수 있는 방법이 없습니다 O
. 또는 자신만의 파일 이름을 사용할 수도 있습니다.
curl http://{one,two}.site.example -o "file_#1.txt"
http://one.site.example
에 저장되고 file_one.txt
에 http://two.site.example
저장 됩니다 file_two.txt
.
여러 변수가 작용할 수도 있습니다. 좋다:
curl http://{site,host}.host[1-5].example -o "#1_#2"
http://site.host1.example
에 저장되는 원인 site_1
, http://host.host1.example
에 저장되는 원인 host_1
등입니다.
답변3
여기서 문제는 쉘(아마도 BASH)이 명령을 해석하는 방식입니다 curl
.
기본적으로 보면
curl -O http://domain/path/to/{file1,file2}
다음으로 확장합니다.
curl -O http://domain/path/to/file1 http://domain/path/to/file2
플래그는 -O
첫 번째 인스턴스에만 적용되고 그 이후의 인스턴스에는 적용되지 않기 때문에 문제가 됩니다.
이 문제는 URL을 큰따옴표로 묶어서 해결할 수 있습니다.
curl -O "http://domain/path/to/{file1,file2}"
Curl 팀은 이를 인정했습니다.GitHub맨 페이지뿐만 아니라공식 컬 매뉴얼커밋되므로 향후 일부 셸에서 이러한 잠재적인 글로빙 동작을 반영해야 합니다.
이 실패와 해결 방법을 확인하기 위한 간단한 테스트 사례를 원한다면 두 개의 .txt 파일이 포함된 zip 파일을 다운로드해 보세요.모비딕~에서프로젝트 구텐베르크.
달리기:
curl -O https://www.gutenberg.org/files/2701/2701-{0,h}.zip
다음과 같은 응답이 제공됩니다.
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 500k 100 500k 0 0 380k 0 0:00:01 0:00:01 --:--:-- 380k Warning: Binary output can mess up your terminal. Use "--output -" to tell Warning: curl to output it to your terminal anyway, or consider "--output Warning: <FILE>" to save to a file.
(추출한 파일이 원시 텍스트인 경우 표준 출력(아마도 화면)으로 덤프됩니다.모비딕이것이 .zip 파일이 대신 사용되는 이유입니다. )
달리기:
curl -O "https://www.gutenberg.org/files/2701/2701-{0,h}.zip"
다음과 유사한 출력이 제공됩니다.
[1/2]: https://www.gutenberg.org/files/2701/2701-0.zip --> 2701-0.zip --_curl_--https://www.gutenberg.org/files/2701/2701-0.zip % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 500k 100 500k 0 0 407k 0 0:00:01 0:00:01 --:--:-- 407k
[2/2]: https://www.gutenberg.org/files/2701/2701-h.zip --> 2701-h.zip --_curl_--https://www.gutenberg.org/files/2701/2701-h.zip % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 522k 100 522k 0 0 1000k 0 --:--:-- --:--:-- --:--:-- 1000k
이 문제는 { }
와일드카드를 사용할 때만 발생합니다. 사용되는 경우에는 [ ]
큰따옴표가 필요하지 않습니다 .
참고로, wget
설치된 경우 따옴표 없이 와일드카드를 처리할 수 있습니다.
달리기:
wget http://domain/path/to/{file1,file2}
두 파일이 모두 존재하면 풀다운됩니다.
달리기:
wget https://www.gutenberg.org/files/2701/2701-{0,h}.zip
curl
Moby Dick zip 파일은 위의 큰따옴표 예에 따라 다운로드됩니다 .
답변4
컬을 사용하여 여러 파일을 다운로드하는 다른 방법이 있습니다.
urls="firstUrl secondUrl thirdUrl"
for url in $urls
do
curl -O "$url"
done
노트: 필수 공백은 서로 다른 URL을 구분하는 데 사용됩니다.