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セッションの正しい再利用とは異なり、低いサーバー負荷でより高速な接続が可能であり、--
これを有効な主張にする論理エラーはありません。