rsync --delete não está funcionando
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
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 emfilelist.txt.- o
--deleteargumento é necessário para permitir que o rsync apague os arquivos dafoopasta
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