단일 파일을 다운로드할 때 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.jpg
image2.jpg
2.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
더 빨라지기를 바라기보다는 시도해 보고 속도가 얼마나 느린지 확인해야 할 수도 있습니다 . 이렇게 하면 속도가 얼마나 느린지 추측할 필요 없이 그냥 확인하기만 하면 됩니다. 다음과 같은
여러 프로세스를 시작할 수도 있습니다 .wget
https://stackoverflow.com/questions/7577615/parallel-wget-in-bash/11850469#11850469(거기보다 더 많은 인수를 전달하면 됩니다) 작은 파일의 경우 모든 속도가 빨라집니다.
여전히 대상 파일 이름 목록을 작성해야 하는 경우 다운로드 후 파일 이름을 바꿀 수 있습니다(실제로 요구하는 내용은 아님).