
Ich organisiere einige Dateien auf meiner Festplatte neu und habe eine alte Kopie eines Ordners. Ich möchte sicherstellen, dass jede Datei in Ordner A (der alten Kopie) in Ordner B vorhanden ist. Jeder Ordner enthält mindestens 200 Dateien, von denen die meisten wahrscheinlich Duplikate sind.
Vorbehalt: Ich kann nicht nur die Dateinamen überprüfen, sondern muss auch sicherstellen, dass sie den gleichen Inhalt haben (à la fdupes
).
Ich habe auf der Manpage nachgesehen, fdupes
ob es eine Möglichkeit gibt, die umgekehrte Operation durchzuführen (also herauszufinden, welche Dateiennichthabe keine Kopien), aber ging mit leeren Händen, selbst wenn die Funktionalität vorhanden wäre, habe ich immer noch Dateien, die nur im Ordner B vorhanden sind.
Diese beiden Fragen waren ähnlich, betrafen aber nur Windows und waren daher keine große Hilfe:
- Wie kann ich alle Ordner in Ordner A finden, die in Ordner B nicht vorhanden sind?
- Löschen Sie Dateien aus einem Ordner, wenn eine ähnlich benannte Datei in einem anderen Ordner nicht vorhanden ist
Dank im Voraus.
Antwort1
Wenn Sie bereits eine Liste doppelter Dateien haben, vergleichen Sie diese einfach mit der Liste aller Dateien, um die einzelnen Dateien zu finden:
fdupes -r dir1 dir2 | grep -vwFf- <(find dir1 dir2 -type f)
-w
rechnet nur mit ganzen Wörtern (keine Teilstrings, daherabcd
wird die Datei nicht mit abgeglichenabc
)-F
betrachtet die Muster als wörtlich, nicht als reguläre Ausdrücke-f
verwendet die angegebene Datei (-
in diesem Fall also die Standardeingabe) als Liste von Ausdrücken, mit denen abgeglichen werden soll.-v
wie Sie wahrscheinlich wissen, werden die nicht übereinstimmenden Zeilen angezeigt.
Die Ausgabe sollte eine Liste mit den Dateien enthalten, die nur in einem der Ordner gefunden wurden. Es sollte einfach zu überprüfen sein, dass sie sich alle im Ordner B befinden, indem man wie folgt nach dem Namen des Ordners A (im Folgenden genannt dir1
) sucht:
fdupes -r dir1 dir2 | grep -vwFf- <(find dir1 dir2 -type f) | grep -F dir1