wget がファイルをダウンロードする前にファイル名を変更する (ローカルバージョンの名前を変更しない)

wget がファイルをダウンロードする前にファイル名を変更する (ローカルバージョンの名前を変更しない)

私はウェブサイトのファイルシステムを持っていますが、各ファイルには要約コピーと大きなコピーの2つのコピーがあり、それぞれ名前が異なります。たとえば、大きなコピーファイルは次のようになります。 ページ/情報/GK2grkG23r_lg.html一方、要約コピーでは、拡張子前の文字は次のように変更されます。ページ/info/GK2grkG23r_sh.htmlファイルシステム上でwgetを実行しようとしていますが、設計上、すべてのリンクはリソースを節約するために小さなコピーを指しており、大きなコピーが必要です。そのため、wgetを実行している間ページすべての要約コピーをダウンロードする可能性があります:

pages/info/GK2grkG23r_sh.html
pages/info/2Yp58xr4Ir_sh.html
pages/info/Lmk2nIj23r_sh.html
pages/info/M23Dka6D4r_sh.html

wget がダウンロードするファイルの名前を次のように変更したいと思います。

pages/info/GK2grkG23r_lg.html
pages/info/2Yp58xr4Ir_lg.html
pages/info/Lmk2nIj23r_lg.html
pages/info/M23Dka6D4r_lg.html

wget が見つけるファイルは最初のセットを指します。

明確に言うと、私は上記の最初の名前のセットを持つファイルをダウンロードして、その後名前を変更したいわけではありません。wget を実行して、最初のファイル リストをダウンロードしようとしますが、文字を少し変更して 2 番目のリストをダウンロードします。wget でこれができますか?

答え1

回避策を試すことができます。

マイルストーンは次のとおりです。

  1. ファイルの完全なリストをダウンロードしてファイルに保存します
  2. ファイル名の最後の部分を変更する
  3. 名前が変更されたファイルのみをダウンロードします。

filter.awk次のようなファイルが必要です

/^--.*--  http:\/\/.*[^\/]$/ { u=$3; }
/^Length: [[:digit:]]+/ { print u; }

ステップバイステップ:

wget -r -np --spider http://yourhost | awk -f filter.awk  > My_List.txt
sed -i s/_sh.html/_lg.html/g My_List.txt
wget -x -i My_List.txt

クレジット:
インスピレーションの源この答え

答え2

まず、インデックス ファイルを取得します。

wget -O index.html "$URI"

次に、その中の URL を書き換えます。

sed -i '/_sh\(\.html\)/_lg\1/g' index.html

(私は sed を使用しましたが、たとえば XSLT ベースのアプローチの方が好みかもしれません。お好みで選んでください。)

pages/info/*ここで、変更されたインデックス ファイルとその元の場所を開始ベース URI として使用して、すべての を取得するように wget に指示します。

wget --recursive --level=1 \
    --input-file=index.html --force-html --base="$URI" \
    --accept-regex 'pages/info/.*_lg\.html'

注意: これらの長いオプションのほとんどには短い代替オプションがあります - マニュアルページを参照してください。わかりやすくするために長い形式を使用しました。

関連情報