背景:我提出这个问题的具体问题如下。我是 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 但我不知道如何将它用作某些过程的输入——删除旧文件不在当前文件列表中。您能否指出我的手册页或其他描述如何执行此操作的内容?再次感谢。
此外,该 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.
免责声明:我目前无法测试我建议的任何代码。与往常一样,请在将此代码构建到正确的脚本之前仔细测试。
鉴于它是一个包列表(因此具有没有空格的简单文件名等),您可能可以使用一些非常简单的代码来挑选文件名
如您所见,您需要删除 final
echo
以允许rm
其工作此外,下次您想更新镜像时,您可以修改该
comm
行(通过交换两个文件参数)以找到您没有的文件集,并将这些文件提供给wget
.