URL 패턴을 통해 일부 파일을 다운로드해야 합니다. https://www.server.org/data/2021/{i}
여기서는 1부터 1000까지 다양할 수 있습니다.
파일은 PDF 파일이며 모두 고유한 이름을 갖습니다. 예:
https://www.server.org/data/2021/1 ====> document_about_feature.pdf
https://www.server.org/data/2021/2 ====> "activity report.pdf"
https://www.server.org/data/2021/3 ====> "2021-financial analysis from bla bla.pdf"
...
현재 저는 이 파일들을 사용하고 있습니다wget
다음과 같이:
#!/bin/bash
for i in {1..1000}
do
URL="https://www.server.org/data/2021/${i}"
wget -nv --content-disposition "${URL}"
done
이것이 파일을 다운로드할 때 원본 파일 이름을 유지하는 유일한 방법입니다(플래그가 없으면 --content-disposition
파일 이름은 1.pdf, 2.pdf, 3.pdf 등이 됩니다). 따라서 잘 작동하지만 i
파일 이름 뒤에 접두사(또는 접미사)를 추가하여 파일 이름 사이의 링크를 유지하고 싶습니다 .
https://www.server.org/data/2021/1 ====> 1_document_about_feature.pdf
https://www.server.org/data/2021/2 ====> "2_activity report.pdf"
https://www.server.org/data/2021/3 ====> "3_2021-financial analysis from bla bla.pdf"
...
이를 올바르게 달성하려면 어떻게 해야 합니까(Ubuntu 22.04.3)?
버전: GNU Wget(linux-gnu에 구축된 1.21.2).
답변1
다음과 같은 것을 다운로드하고 이름을 바꿀 수도 있습니다.
#!/bin/bash
# use this directory as tempfile prefix
# (so that move becomes a single-filesystem operation)
tmpdirname="$(mktemp -d -p --tmpdir . "fetch_XXXXXXX")"
for i in {1..1000}; do
URL="https://www.server.org/data/2021/${i}"
# I'm almost certain you'll want file names 0001,…,0999,1000; not 1…1000
formatted="$(printf '%04d' i)"
dirname="${tmpdirname}/${formatted}"
mkdir "${dirname}"
pushd "${dirname}"
wget -nv --content-disposition "${URL}"
filename=*
popd
mv -- "${dirname}/${filename}" "${formatted} ${filename}"
rmdir "${dirname}"
done
rmdir "${tmpdirname}
개인적으로 페이지 에 따르면 wget
주변에 더트바이크가 있었던 것으로 기억합니다 .--content-disposition
man
curl
나는 요즘 그것에 기울고 있으므로 다음 wget -nv --content-disposition "${URL}"
으로 대체하겠습니다 curl --remote-name --remote-header-name
.
#!/bin/bash
# use this directory as tempfile prefix
# (so that move becomes a single-filesystem operation)
tmpdirname="$(mktemp -d -p --tmpdir . "fetch_XXXXXXX")"
for i in {1..1000}; do
URL="https://www.server.org/data/2021/${i}"
# I'm almost certain you'll want file names 0001,…,999,1000; not 1…1000
formatted="$(printf '%04d' i)"
dirname="${tmpdirname}/${formatted}"
mkdir "${dirname}"
pushd "${dirname}"
curl --remote-name --remote-header-name -- "${URL}"
filename=*
popd
mv -- "${dirname}/${filename}" "${formatted} ${filename}"
rmdir "${dirname}"
done
rmdir "${tmpdirname}
1 잘 테스트된 매우 현대적인 프로토콜 지원, wget
TLS 세션의 올바른 재사용과 달리 낮은 서버 로드에서 더 빠른 연결이 가능하고 --
이를 유효한 주장으로 만드는 논리 오류가 없습니다.