Antecedentes: meu problema específico, que deu origem a esta pergunta, é o seguinte. Eu sou um usuário do slackware linux e em 23 de março de 2019 espelhei sua distribuição com o seguinte comando
wget -r -np -R "index.html*" https://mirror.slackbuilds.org/slackware/slackware64-current/
Então, recentemente, em 29 de agosto de 2019, atualizei/atualizei meu espelho local simplesmente adicionando a -N
opção ao comando acima. Mas isso resultou no meu espelho contendo muitas, muitas versões "duplicadas" mais antigas e mais novas dos mesmos pacotes, apenas com números de versão diferentes, por exemplo,
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
etc (e eu quero dizer muitos etc's :)
Pergunta: Então, o que eu realmente quero fazer é algo como
rsync -av --delete https://mirror.slackbuilds.org/slackware/slackware64-current/ my-slackware64-mirror-directory/
Isso rsync --delete
teria excluído automaticamente todas as versões mais antigas do meu diretório-espelho que não existem mais no slackbuilds.org. No entanto, não tenho nenhum tipo de conta no slackbuilds e, portanto, não posso (até onde sei) executar o rsync para obter arquivos dele. Existe alguma maneira wget de realizar a mesma coisa? Ou de qualquer maneira? Obrigado.
Edit: resposta longa ao comentário de @roaima...
Obrigado pela sugestão, @roaima. E agora que você mencionou, sim, existe um arquivo assim no diretório de nível superior, previsivelmente chamado FILELIST.TXT Mas não tenho certeza de como usá-lo como entrada para algum procedimento que --delete os arquivos mais antigos não na lista de arquivos atual. Você poderia me apontar para uma página de manual, ou qualquer outra coisa, que descreva como fazer isso? Obrigado novamente.
Além disso, esse FILELIST.TXT está em um ls -al
formato que pode não ser o mais fácil para os procedimentos predefinidos analisarem (embora eu provavelmente possa escrever um pequeno programa em C para convertê-lo em qualquer formato adequado). Algumas linhas típicas do arquivo são
-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_
E muito relevante para sua sugestão aparentemente presciente, as primeiras linhas do arquivo são a observação
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.
Isenção de responsabilidade: atualmente não posso testar nenhum código que estou sugerindo. Como sempre, teste cuidadosamente antes de construir este código em um script adequado.
Dado que é uma lista de pacotes (e, portanto, com nomes de arquivos simples sem espaços, etc.), você provavelmente pode escolher os nomes de arquivos com algum código muito direto
Como você pode ver, você precisará remover o final
echo
para permitirrm
seu trabalhoAlém disso, da próxima vez que você quiser atualizar seu espelho, você pode modificar a
comm
linha (trocando os dois argumentos de arquivo) para encontrar o conjunto de arquivos que você não possui e alimentá-los parawget
.