rsync-like --delete 機能と wget(wget の --delete-after ではない)

rsync-like --delete 機能と wget(wget の --delete-after ではない)

背景:この問題を引き起こした具体的な質問は次のとおりです。私はSlackware Linuxユーザーで、2019年3月23日に次のコマンドを使用してディストリビューションをミラーリングしました。

wget -r -np -R "index.html*" https://mirror.slackbuilds.org/slackware/slackware64-current/

-Nさらに、最近の2019年8月29日に、上記のコマンドにローカルミラーを更新または更新するオプションを追加しました。ただし、これにより、同じパッケージの古いバージョンと新しいバージョンの「重複」がたくさんあるイメージが作成されました。

SDL2_mixer-2.0.4-x86_64-1.txz
SDL2_mixer-2.0.4-x86_64-2.txz
libcddb-1.3.2-x86_64-5.txz
libcddb-1.3.2-x86_64-6.txz

ちょっと待って場所待機中:)

質問:だから私が本当にしたいことは

rsync -av --delete https://mirror.slackbuilds.org/slackware/slackware64-current/ my-slackware64-mirror-directory/

これにより、rsync --deleteslackbuilds.orgに存在しなくなったミラーディレクトリから古いバージョンが自動的に削除されます。しかし、私はslackbuildsにいかなる種類のアカウントも持っていないので(私が知っている限り)rsyncを実行してファイルをインポートする方法はありません。同じことを行うことができるwgetメソッドはありますか?それともどのような方法がありますか?ありがとうございます。


編集:@roaimaのコメントへの長い応答...
    @ roaimaさん、アドバイスありがとうございます。あなたが言及したので、はい、最上位ディレクトリにFILELIST.TXTという名前のファイルがありますが、現在のリストの代わりに古いファイルを削除するいくつかのプロセスへの入力としてこのファイルを使用する方法がわかりません。マンページやこれを行う方法を説明する方法を教えてください。もう一度ありがとうございます。

また、FILELIST.TXTの形式は、   ls -al   プログラムの構文解析を修正する最も簡単な方法ではないかもしれません(小さなCプログラムを書いて適切な形式に変換することはできますが)。ファイルの一部の一般的な行は次のとおりです。

-rw-r--r--  1 root root   1637708 2019-08-15 18:06 ./slackware64/a/bash-5.0.009-x86_64-1.txz
-rw-r--r--  1 root root       163 2019-08-15 18:06 ./slackware64/a/bash-5.0.009-x86_64-1.txz.asc
-rw-r--r--  1 root root       226 2018-10-17 03:06 ./slackware64/a/bin-11.1-x86_64-3.txt
-rw-r--r--  1 root root     39576 2018-10-17 03:06 ./slackware64/a/bin-11.1-x86_64-3.txz
-rw-r--r--  1 root root       163 2018-10-17 03:06 ./slackware64/a/bin-11.1-x86_

明らかに先見の明のある提案と非常に関連しており、ファイルの最初の数行は説明です。

Wed Aug 28 21:44:15 UTC 2019
Here is the file list for this directory.  If you are using a 
mirror site and find missing or extra files in the disk 
subdirectories, please have the archive administrator refresh
the mirror.

答え1

免責事項:現在私が提案したコードをテストすることはできません。いつものように、このコードを正しいスクリプトで書く前に慎重にテストしてください。

パッケージリストであることを考慮すると(スペースなどのない単純なファイル名がある)、非常に単純なコードを使用してファイル名を選択できます。

# Get last item from each line of FILELIST
awk '{print $NF}' FILELIST | sort >weblist

# Generate a list of your files
find -type f -print | sort >mylist

# Compare results
comm -23 mylist weblist >diffs

# Remove old files
xargs -r echo rm -fv <diffs

ご覧のとおり、操作を実行するechoには最後の項目を削除する必要があります。rm

また、次にイメージを更新する場合は、この行を変更してcomm(2つのファイルパラメータを置き換えて)、更新するファイルセットを見つけることができます。いいえ所有して供給しますwget

関連情報