rsync Löscht nur passende Dateien

rsync Löscht nur passende Dateien

Wie kann ich mit rsync (oder einem anderen Programm) identische Dateien zwischen Verzeichnissen löschen? Um identisch zu sein, müssen Speicherort und Metadaten übereinstimmen (Berechtigungen, Eigentümerschaft, Zeitstempel).

Beispielsweise sichere ich Verzeichnis X in Verzeichnis Y. Nach einiger Zeit werden Dateien in Verzeichnis X hinzugefügt und daraus entfernt.

Ich möchte aus X alle Dateien/Verzeichnisse entfernen, die in Y identisch übereinstimmen. Dateien in X, die unterschiedlich sind, sollen nicht berührt werden.

Hinweis: Ich bin mit jdupes vertraut, aber ich versuche nicht, einfach irgendwelche identischen Dateien zu löschen. Ich möchte Dateien löschen, die auch hinsichtlich Verzeichnisort und Dateinamen identisch sind.

Antwort1

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

Warnung-

Diese Lösung vergleicht Dateien anhand der Ausgabe von ls -l, vergleicht also die Metadaten Datum+Uhrzeit+Besitzer+Berechtigungen+Dateiname und vergleicht nicht die Bytes innerhalb der Dateien. Außerdem ist sie nicht sicher für Dateien mit Zeilenumbrüchen im Namen.

verwandte Informationen