Zwei Verzeichnisse rekursiv anhand von Prüfsummen vergleichen?

Zwei Verzeichnisse rekursiv anhand von Prüfsummen vergleichen?

Ich versuche herauszufinden, welche Dateien nicht existieren, indem ich eine Prüfsumme ihres Inhalts bilde. Ich habe zwei Verzeichnisse /foound /barbeide 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/foound /tmp/barsollte 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:

verwandte Informationen