Espelhamento com wget - Excluir arquivos antigos

2

Estou usando o wget para espelhar um arquivo-arquivo ftp.

Este é o meu comando:
wget -m $mirror
(Stripped todos os parâmetros desnecessários)

Até agora, tudo está bem, todas as diferenças para o arquivo online serão sincronizadas.

Mas agora, há um script que remove os arquivos da minha cópia, pois eles não são necessários. Então, se eu iniciar o wget novamente, ele também baixará novamente esses arquivos (vários gigabytes!).

Is there an option to exclude files from the download, that are older than a certain timestamp?

Eu já vi os parâmetros -A -R -I -X , mas eles parecem funcionar apenas com nomes de arquivos ...

    
por Nippey 30.01.2013 / 08:51

1 resposta

0

Meu primeiro pensamento ao ler sua pergunta foi "Isso parece um trabalho para rsync !". Infelizmente, enquanto rsync pode de fato pular prédios altos em um único limite, ele não pode lidar com FTP. Se você tiver acesso ssh ao espelho, as coisas serão muito mais fáceis.

Assumindo que não, você pode tentar montar o diretório FTP remoto localmente, e então você pode usar o simples cp (inspirado em isto ):

  1. Instale o curlftpfs. Se você está em uma distro baseada no Debian (eu suponho que você esteja usando Linux desde que você mencionou wget ), execute

    apt-get install curlftpfs 
    
  2. Criar caminho de montagem local

    mkdir -p /mnt/myftp
    
  3. Monte o site ftp de destino usando curlftpfs

    curlftpfs -o allow_other ftp://user:[email protected] /mnt/myftp
    
  4. Use cp para copiar os arquivos, passando um comando find como argumento:

    cd /mnt/myftp && \
    cp -v --parents 'find . -type f -mtime -20' ~/foo/
    

Explicação:

  • O comando find encontrará todos os arquivos ( -type f ) no servidor FTP remoto que foram modificados < = há 20 dias ( -mtime 20 ).
  • O comando cp copia esses arquivos
    • Se eles forem mais recentes que o arquivo correspondente no diretório de destino ( -u )
    • Preservando seus diretórios pai ( --parents )
  • O cd /mnt/myftp bit é necessário para que cp crie os diretórios pai corretos na pasta de destino. Se você não cd para o diretório ftp, cp criará pastas como esta:

    ~/foo/mnt/myftp/bar
    

    Em vez disso:

    ~/foo/bar
    

Combinados, esses comandos / opções devem ter o efeito desejado de espelhar o servidor remoto, ignorando os arquivos mais antigos.

Advertências:

Este é um cenário relativamente simplista. Se você tiver requisitos mais avançados (todas as opções wget que você deixou de fora), convém dar uma olhada em man cp ou, para opções mais avançadas, man rsync . Você poderá fazer basicamente a mesma coisa em rsync passando o resultado do comando find usando a opção rsync --include-from .

Se você atualizar sua pergunta com requisitos mais específicos (como preservar links, links físicos, carimbos de data e hora, privilégios de usuário, recursão de diretório e afins), eu deveria poder modificar minha resposta para atendê-los.

    
por 30.01.2013 / 20:01

Tags