rsync Excluir apenas arquivos correspondentes

rsync Excluir apenas arquivos correspondentes

Como posso usar o rsync (ou outro programa) para excluir arquivos idênticos entre diretórios? Para serem idênticos, a localização e os metadados devem corresponder (permissões, propriedade, carimbo de data/hora)

Por exemplo, faço backup do diretório X para Y. Depois de algum tempo, arquivos são adicionados e removidos em X.

Quero remover do X todos os arquivos/diretórios que correspondam de forma idêntica em Y. Não toque nos arquivos no X que sejam diferentes.

Nota: estou familiarizado com o jdupes, mas não estou tentando excluir quaisquer arquivos idênticos. Quero excluir arquivos que também sejam idênticos na localização do diretório e no nome do arquivo.

Responder1

cd /path/to/X
find -type f -exec ls -l {} \; > /tmp/LIST # Get a list of all files in X
cd /path/to/Y
find -type f -exec ls -l {} \; >> /tmp/LIST # Get a list of all files in Y (combine with list from X)
cd /tmp
sort LIST > SORT # Sort all listed
uniq -d SORT > DUP # Exclude files that aren't listed twice
cd /path/to/X
cat /tmp/DUP | xargs -d '\n' rm # Delete all files listed as duplicate
find -type d -empty -delete # Optional, delete all empty directories

Aviso-

Esta solução compara arquivos usando a saída de ls -l, portanto compara metadados data+hora+proprietário+permissões+nome do arquivo e não compara bytes dentro dos arquivos. Além disso, não é seguro para arquivos com novas linhas em seus nomes.

informação relacionada