
Ich versuche herauszufinden, welche Dateien nicht existieren, indem ich eine Prüfsumme ihres Inhalts bilde. Ich habe zwei Verzeichnisse /foo
und /bar
beide Verzeichnisse repräsentieren beliebige Zustände auf dem System. Ich möchte alle findenDateienin root /bar
, die nicht in root existieren /foo
(rekursiv). Ein Wörterbuch von /bar/**
mit
CheckSum -> filepath
weniger das Wörterbuch von /foo/**
mit
CheckSum -> filepath
Ich kann dies mit md5sum oder so etwas schreiben, aber es muss bereits ein Dienstprogramm geben, das dies tut.
Nur um das klarzustellen: Wenn zwei Dateien identisch sindaußerIch möchte, dass sie anhand des Standorts (Name und Pfad) als gleich identifiziert werden.
Testfall
Lassen Sie uns einen Baum mit einigen Testdaten erstellen.
/tmp/foo
└── myFile (duplicate of /tmp/bar/quz/asdf/otherFileName)
/tmp/bar
├── qaz
│ └── findMe
└── quz
└── asdf
└── otherFileName (duplicate of /tmp/foo/myFile)
Skript zur Erstellung,
mkdir -p /tmp/foo /tmp/bar/quz/asdf /tmp/bar/qaz
# One file that exists in both locations
dd if=/dev/urandom of=/tmp/foo/myFile bs=1k count=10
cp /tmp/foo/myFile /tmp/bar/quz/asdf/otherFileName
# One file (findMe) that exists in only /mpt/bar/
dd if=/dev/urandom of=/tmp/bar/qaz/findMe bs=1k count=10
Das Programm vergleicht also /tmp/foo
und /tmp/bar
sollte finden/tmp/bar/qaz/findMe
Antwort1
Ich würde eine MD5Sum-Liste (eine Spalte für die Summe und eine Spalte für den Dateinamen) für beide Bäume generieren und das Ergebnis an ein Skript (z. B. awk oder Perl) weiterleiten, das die Summe als Hash für die Dateinamen verwenden und das Skript dazu veranlassen kann, Dateinamen mit demselben Hashwert zu melden.
Das ist mehr als ein Einzeiler und eine häufig gestellte Frage, die auch häufig gelöst wird (eine Websuche nach Inhalt und doppelten Dateien liefert mehr als eine Million Treffer).
Das könnte Sie hilfreich finden: