wget을 통해 검색된 파일 이름 앞에 --content-disposition 옵션을 사용하십시오.

wget을 통해 검색된 파일 이름 앞에 --content-disposition 옵션을 사용하십시오.

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-dispositionman

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 잘 테스트된 매우 현대적인 프로토콜 지원, wgetTLS 세션의 올바른 재사용과 달리 낮은 서버 로드에서 더 빠른 연결이 가능하고 --이를 유효한 주장으로 만드는 논리 오류가 없습니다.

관련 정보