rsync --delete não está funcionando

Sep 15 2020

O sistema operacional é Debian 10, rsync versão 3.1.3. Estou executando o rsync assim:

time rsync -ar --delete --info=progress2 --files-from=filelist.txt . /path/to/dest

Isso funciona para copiar os arquivos, mas não exclui nada que foi removido. (Totalmente removido de src ou, no meu caso, removido de filelist.txt) Esse é um grande problema. A única solução que encontrei é simplesmente explodir todo o destino e apenas copiar tudo novamente, mas isso leva muito tempo e basicamente anula o uso de rsync em primeiro lugar.

Isso é um inseto? Como faço para que o rsync funcione corretamente, honrando o sinalizador --delete como deveria?

Editar:

Por exemplo:

  • Se filelist.txt contém "foo", então / path / to / dest conterá "foo".
  • Se filelist.txt contém "foo" e "bar", então / path / to / dest conterá "foo" e "bar".
  • Se filelist.txt contém "foo", "bar" e "bat", então / path / to / dest conterá "foo", "bar" e "bat".
  • etc

Assuma que "foo" "bar" "bat" etc são diretórios.

Respostas

3 laktak Sep 24 2020 at 14:24

Você precisa dizer ao rsync para excluir os argumentos ausentes:

rsync -arv --delete-missing-args --delete --info=progress2 --files-from=filelist.txt . /path/to/dest
  • Portanto, se você excluir o diretório, fooele também será excluído /path/to/destcom --delete-missing-args.
  • fooainda precisa ser listado em filelist.txt.
  • o --deleteargumento é necessário para permitir que o rsync apague os arquivos da foopasta
SandeepKothari Sep 28 2020 at 15:16

Não rsync. Não excluirá arquivos / diretórios apenas porque a lista de arquivos não contém esses arquivos ou está vazia.

se você estiver usando, --files-fromele tentará sincronizar apenas os arquivos listados da origem para o destino.

Isso não excluirá os arquivos apenas porque eles estão ausentes da lista de arquivos passada para --files-from.

Para --delete funcionar, você precisa usar o caminho de origem real.

rsync -ar --delete path/to/src path/to/destination