Trova tutte le cartelle in una directory con lo stesso contenuto


10

In Ubuntu, c'è qualcuno per trovare cartelle duplicate in una directory (cioè cartelle con lo stesso contenuto)? Penso che ci siano già alcuni strumenti da riga di comando disponibili per trovare file duplicati (come fdupes), ma voglio invece trovare cartelle duplicate. Ossia, trova le cartelle che corrispondono in termini di contenuto dei file che contengono (anche se i nomi dei file e altri metadati potrebbero differire).


Potrei iniziare generando un elenco di tutte le cartelle in una directory (ordinate per lunghezza) e quindi controllare ogni coppia di cartelle con la stessa lunghezza.
Anderson Green,

Definire "duplicato". I file all'interno devono corrispondere semplicemente al contenuto del file? Nome del file? Numero di nodo? Dimensione del file?
Chris Down,

@ChrisDown La domanda è stata aggiornata.
Anderson Green,

3
Sì. Le directory sono in realtà solo file, quindi la tua affermazione è ambigua. Avere lo "stesso contenuto" nella realtà significherebbe che entrambe le directory contengono gli stessi riferimenti agli inode. Non è chiaro se intendi questo o se intendi che i file all'interno debbano avere lo stesso contenuto e, in tal caso, se ci siano altre clausole (mtime, nome file, ecc.).
Chris Down,

3
@ChrisDown Voglio dire che i file all'interno dovrebbero avere lo stesso contenuto.
Anderson Green,

Risposte:


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"

Puoi vederlo in azione qui:

$ 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

Dato che questo script non è stato testato, sono ansioso di vedere se funziona nel modo in cui dovrebbe funzionare.
Anderson Green,

1
@AndersonGreen Controlla la risposta aggiornata, testata.
Chris Down,

Bello! Dovrebbe esserci anche un test con cat > 1/2 <<< bare cat > 2/3 <<< bar per mostrare più file e metadati diversi (== "Same")
nealmcb

@ChrisDown: è necessario ordinare nell'ultimo passaggio?
harish.venkat,

Script elegante, solo un bug minore è che restituisce Same quando una o entrambe le directory non esistono. Dovrebbe essere facilmente risolvibile se uno è meglio nello scripting di I.
coseno
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.