rsync Eliminar solo archivos coincidentes

rsync Eliminar solo archivos coincidentes

¿Cómo puedo usar rsync (u otro programa) para eliminar archivos idénticos entre directorios? Para que sean idénticos, la ubicación y los metadatos deben coincidir (permisos, propiedad, marca de tiempo)

Por ejemplo, hago una copia de seguridad del directorio X en Y. Después de un tiempo, se agregan y eliminan archivos en X.

Quiero eliminar de X todos los archivos/directorios que coincidan idénticamente en Y. No toque archivos en X que sean diferentes.

Nota: Estoy familiarizado con jdupes, pero no intento eliminar archivos idénticos. Quiero eliminar archivos que también sean idénticos en ubicación de directorio y nombre de archivo.

Respuesta1

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

Advertencia-

Esta solución compara archivos utilizando la salida de ls -l, por lo que compara metadatos fecha+hora+propietario+permisos+nombre de archivo y no compara bytes dentro de los archivos. Además, no es seguro para archivos con nuevas líneas en su nombre.

información relacionada