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 --delete
將自動從我的鏡像目錄中刪除所有舊版本,這些舊版本不再存在於 slackbuilds.org 上。但是,我在 slackbuilds 上沒有任何類型的帳戶,因此(據我所知)無法執行 rsync 以從中獲取文件。有沒有 wget 方法來完成同樣的事情?或者任何方式?謝謝。編輯:長時間回复@roaima 的評論…
感謝@roaima 的建議。現在你提到它,是的,在頂級目錄中有這樣一個文件,可以預見地命名為 FILELIST.TXT 但我不確定如何將它用作某些程序的輸入,該程序將 –delete old files not在目前文件列表中。您能否指出我的手冊頁或其他描述如何執行此操作的內容?再次感謝。
此外,該 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.
免責聲明:我目前無法測試我建議的任何程式碼。與往常一樣,請在將此程式碼建構到正確的腳本之前仔細測試。
鑑於它是一個包列表(因此具有沒有空格的簡單文件名等),您可能可以使用一些非常簡單的程式碼來挑選文件名
# 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
如您所見,您需要刪除 final
echo
以允許rm
其工作此外,下次您想更新鏡像時,您可以修改該
comm
行(通過交換兩個文件參數)以找到您沒有的文件集,並將這些文件提供給wget
.