Suchen Sie alle Ordner in einem Verzeichnis mit demselben Inhalt


10

Gibt es in Ubuntu doppelte Ordner in einem Verzeichnis (dh Ordner mit demselben Inhalt)? Ich denke, es gibt bereits einige Befehlszeilentools zum Suchen doppelter Dateien (wie z. B. fdupes), aber ich möchte stattdessen doppelte Ordner suchen. Suchen Sie also nach Ordnern, die hinsichtlich des Inhalts der darin enthaltenen Dateien übereinstimmen (obwohl sich die Dateinamen und andere Metadaten möglicherweise unterscheiden).


Ich könnte damit beginnen, eine Liste aller Ordner in einem Verzeichnis (sortiert nach Länge) zu erstellen und dann jedes Ordnerpaar mit derselben Länge zu überprüfen.
Anderson Green

Definieren Sie "Duplikat". Müssen die darin enthaltenen Dateien lediglich mit dem Dateiinhalt übereinstimmen? Dateiname? Inode Nummer? Dateigröße?
Chris Down

@ChrisDown Die Frage wurde aktualisiert.
Anderson Green

3
Ja. Verzeichnisse sind eigentlich nur Dateien, daher ist Ihre Aussage nicht eindeutig. Den "gleichen Inhalt" in der Realität zu haben, würde bedeuten, dass beide Verzeichnisse die gleichen Inode-Referenzen enthalten. Es ist unklar, ob Sie das meinen oder ob Sie meinen, dass die darin enthaltenen Dateien den gleichen Inhalt haben sollen, und wenn ja, ob es andere Bestimmungen gibt (Zeit, Dateiname usw.).
Chris Down

3
@ ChrisDown Ich meine, dass die darin enthaltenen Dateien den gleichen Inhalt haben sollten.
Anderson Green

Antworten:


5
#!/bin/bash
shopt -s dotglob

for file in "$1"/*; do [[ -f "$file" ]] && d1+=( "$(md5sum < "$file")" ); done
for file in "$2"/*; do [[ -f "$file" ]] && d2+=( "$(md5sum < "$file")" ); done 

[[ "$(sort <<< "${d1[*]}")" == "$(sort <<< "${d2[*]}")" ]] && echo "Same" || echo "Different"

Sie können es hier in Aktion sehen:

$ mkdir 1 2
$ ./comparedirs 1 2
Same
$ cat > 1/1 <<< foo
$ cat > 2/1 <<< foo
$ ./comparedirs 1 2
Same
$ cat > 2/1 <<< bar
$ ./comparedirs 1 2
Different

Da dieses Skript nicht getestet wurde, bin ich gespannt, ob es so funktioniert, wie es funktionieren soll.
Anderson Green

1
@AndersonGreen Überprüfen Sie die aktualisierte Antwort und testen Sie sie.
Chris Down

Nett! Es sollte auch einen Test mit cat > 1/2 <<< barund geben cat > 2/3 <<< bar , um mehrere Dateien und unterschiedliche Metadaten (== "Same")
anzuzeigen

@ChrisDown: Wird im letzten Schritt sortiert?
harish.venkat

Elegantes Skript, nur ein kleiner Fehler ist, dass es Same zurückgibt, wenn eines oder beide Verzeichnisse nicht vorhanden sind. Sollte leicht zu reparieren sein, wenn man besser in Skripten ist als ich.
Cosinus
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.