
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.