AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 538188
Accepted
John Forkosh
John Forkosh
Asked: 2019-08-30 20:47:56 +0800 CST2019-08-30 20:47:56 +0800 CST 2019-08-30 20:47:56 +0800 CST

Funcionalidade --delete do tipo rsync com wget (não --delete-after do wget)

  • 772

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 -Nopçã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 --deleteteria 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.
wget rsync
  • 1 1 respostas
  • 1333 Views

1 respostas

  • Voted
  1. Best Answer
    roaima
    2019-08-30T23:09:35+08:002019-08-30T23:09:35+08:00

    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

    # 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
    

    Como você pode ver, você precisará remover o final echopara permitir rmseu trabalho

    Além disso, da próxima vez que você quiser atualizar seu espelho, você pode modificar a commlinha (trocando os dois argumentos de arquivo) para encontrar o conjunto de arquivos que você não possui e alimentá-los para wget.

    • 3

relate perguntas

  • Como faço uma duplicata de uma árvore de diretórios com links simbólicos duplicados relativamente?

  • wget não funciona no modo recursivo

  • Problemas de exclusão de Rsync

  • rsync porta 22 e 873 uso

  • Como baixar um arquivo no terminal cujo link redireciona e parece funcionar apenas na GUI?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve