wget은 파일 목록에서 파일을 다운로드합니다. 다운로드한 각 파일의 이름을 지정하는 방법은 무엇입니까?

wget은 파일 목록에서 파일을 다운로드합니다. 다운로드한 각 파일의 이름을 지정하는 방법은 무엇입니까?

단일 파일을 다운로드할 때 wget의 -O옵션을 사용하여 파일 이름을 지정할 수 있습니다. (filelist.txt에 다운로드하려는 URL 목록이 포함되어 있음)을 사용하여 파일에서 URL을 다운로드할 때 wget -i filelist.txt각 파일이 다운로드될 때 이름이 바뀌도록 filelist.txt를 구성하려면 어떻게 해야 합니까?

예를 들어, filelist.txt에 다음 콘텐츠가 포함되어 있는 경우:

--output-document=1.jpg http://images2.example.com/image1.jpg
--output-document=2.jpg http://images2.example.com/image2.jpg

다른 이름 으로 다운로드 image1.jpg해서 저장할 수 있나요 ?1.jpgimage2.jpg2.jpg


편집하다

간단한 스크립팅이나 텍스트 조작 기술을 사용하여 각각 URL을 다운로드하고 출력 파일을 작성하는 여러 wget 명령을 만들 수 있다는 것을 알고 있습니다. 아직 테스트해 보지는 않았지만 속도가 느린 것 같고 단일 wget 프로세스를 사용하여 모든 파일을 다운로드할 수 있는 방법이 있는지 궁금합니다.

답변1

단 한 번의 Wget 호출로는 이 작업을 수행할 수 없습니다. 이는 -O저장된 파일의 이름뿐만 아니라 stdout의 쉘 리디렉션을 의미하는 Wget 옵션의 정의에서 비롯됩니다.

서버에 있는 모든 파일의 이름이 다른 경우에도 단일 Wget 호출로 파일을 모두 다운로드한 다음 쉘 스크립트를 사용하여 이름을 바꾸면 상당히 빠르게 이 작업을 수행할 수 있습니다.

맞습니다. wget을 여러 번 호출하면 속도가 느려집니다. 프로세스 시작 및 해제는 한 가지이지만 각 파일마다 서버에 대한 새로운 HTTP 연결이 필요하므로 빠르게 추가될 수 있습니다.

답변2

파일을 한 줄씩 반복하면서 줄 내용을 변수로 읽어 매개변수 FOO로 사용하면 됩니다.wget

while read FOO; do echo wget $FOO; done < filelist.txt

매개변수를 사용하여 명령줄을 작성하는 데 소요되는 짧은 시간은 다운로드 시간에 비해 손해를 끼치지 않습니다. 서버 측에서는 전혀 차이가 없습니다. 동일하거나 다른 wget프로세스가 파일에 대한 단일 요청을 수행하는 경우(두 경우 모두 수행됨) 연결 유지를 약간 종료해도 큰 차이가 없습니다. 내 생각의 차이.

참고: wget항상 단일 스레드이며, 다중 스레드로 만드는 매개변수가 없습니다. wget각 URL에 대해 새로운 프로세스를 시작하고 -i더 빨라지기를 바라기보다는 시도해 보고 속도가 얼마나 느린지 확인해야 할 수도 있습니다 . 이렇게 하면 속도가 얼마나 느린지 추측할 필요 없이 그냥 확인하기만 하면 됩니다. 다음과 같은
여러 프로세스를 시작할 수도 있습니다 .wgethttps://stackoverflow.com/questions/7577615/parallel-wget-in-bash/11850469#11850469(거기보다 더 많은 인수를 전달하면 됩니다) 작은 파일의 경우 모든 속도가 빨라집니다.

여전히 대상 파일 이름 목록을 작성해야 하는 경우 다운로드 후 파일 이름을 바꿀 수 있습니다(실제로 요구하는 내용은 아님).

관련 정보