Unterschiedliche Dateien von zwei Verzeichnissen

7

Es gibt zwei Verzeichnisse, die ich vergleichen möchte. Ich habe diff ausprobiert, aber es enthält die Änderungen in den Dateien. Alles was ich will ist so etwas

file a is just in /A 
file b is missing in /A 
file c changed
directory d is missing in /A 
directory e is just in /A

Ich denke, dass dies beim vollständigen Patchen von Dateien häufig vorkommt, aber ich kenne keine gute Lösung.

Wienczny
quelle

Antworten:

17

Du schaust nach

diff -rq (dir1) (dir2)

Konzeptioneller Beweiß:

#!/bin/sh
#create our test
mkdir -p /tmp/a/b
echo "test" >> /tmp/a/c
mkdir -p /tmp/a/d/e
echo "blah" >> /tmp/a/d/e/f #only exists here
mkdir -p /tmp/q/b
echo "testing" >> /tmp/q/c #/tmp/a/c shouldnt match
mkdir -p /tmp/q/d/e
echo "blah" >> /tmp/q/d/e/g #only exists here
diff -rq /tmp/a /tmp/q

Ergebnisse in:

Files /tmp/a/c and /tmp/q/c differ
Only in /tmp/a/d/e: f
Only in /tmp/q/d/e: g
Rizwan Kassim
quelle
7

Sie müssen nur das Flag -q einfügen , um es kurz zu machen:

# diff -q dir1 dir2
Files dir1/both and dir2/both differ
Only in dir1/: one
Only in dir2:/ two
djhowell
quelle
2
Wenn Sie Unterverzeichnisse benötigen, fügen Sie auch das Flag -r hinzu.
Djhowell
3

Um Duplikate zu finden, verwenden Sie eine:

fdupes -r1 dir1 dir2

Obwohl die anderen Ihnen zahlreiche gute Tipps gegeben haben, sollten Sie es auch versuchen.

Wenn du benutzt

fdupes -rd dir1 dir2

Sie werden gefragt, welche Datei aufbewahrt werden soll (die anderen werden gelöscht). Sehr nützlich zum Entfernen von Duplikaten (ich habe es mit meinen Fotos gut genutzt)

HINWEIS: Ja, ich weiß, dass die Frage nicht genau das war, aber vielleicht kann sie ihm oder anderen helfen;)

asdmin
quelle
3

Wenn Sie Dateien anhand der Größe vergleichen möchten, können Sie Folgendes tun:

# ls -al DIR_1 |awk '{print $5, $9}'|sort > 1.txt
# ls -al DIR_2 |awk '{print $5, $9}'|sort > 2.txt

und dann:

# diff 1.txt 2.txt

um herauszufinden, welche Dateien unterschiedlich sind oder fehlen. Ich habe dies verwendet, als ich zwei Verzeichnisse mit sehr großen Dateien vergleichen musste, um festzustellen, welche Dateien nicht vollständig heruntergeladen wurden.

Maciej Kucharz
quelle
1

Sie könnten einen Unterschied versuchen von ls:

ls A > a.txt
ls B > B.txt
diff a.txt b.txt

Kein einziger Befehl, aber es sollte funktionieren.

Josh
quelle
Tatsächlich wäre es nicht allzu schwierig, ein Skript zu erstellen, das dies automatisch ausführt und nach sich selbst bereinigt. Ich könnte ein solches Skript schreiben, aber jemand anderes könnte eine bessere Antwort geben.
Josh
Die Antworten anderer Leute diff -q dir1 dir2sind viel besser als meine!
Josh
1

Die klassische Antwort ist der Befehl 'dircmp'. Es hat seine Warzen (z. B. die Ausgabe durch 'pr' leiten, um sie zu paginieren), aber wenn Sie eine Liste von Objekten nur in Verzeichnis eins oder Verzeichnis zwei erhalten würden, und dann für die allgemeinen Dateien, meldet es 'dasselbe' oder 'different' (und der Dateityp für Nicht-Dateien - Verzeichnisse usw.).

Das 'diff -rq' sieht gleichwertig oder besser aus als die Ausgabe von 'dircmp'.

Jonathan Leffler
quelle
0

Ich habe eine ähnliche Frage zu Stack Overflow gestellt , und die Antworten, die ich erhalten habe, könnten für Sie von Interesse sein. Ich war besonders daran interessiert, fehlende Dateien beim Vergleich zweier Verzeichnisse zu finden.

Ich habe auch angegeben, dass die Lösung umbenannte Dateien behandeln soll (z. B. wenn Datei A, die sich in Verzeichnis 1 befand, auch in Verzeichnis 2 vorhanden ist, aber umbenannt wurde, sollte das Skript dies berücksichtigen).

Die Antwort, die ich gewählt habe (sie steht oben), ist sehr nützlich. Als Ausgangspunkt für Ihr Skript ist es möglicherweise einen Blick wert.

grw
quelle