Quanto segue (se sostituisci la prima directory con directory1 e la seconda con directory2) dovrebbe fare ciò che stai cercando e rapidamente:
find directory1 -type d -printf "%P\n" | sort > file1
find directory2 -type d -printf "%P\n" | sort | diff - file1
Il principio fondamentale è che stampa tutte le directory, inclusi i percorsi delle sottodirectory relative alle directory di baseN directory.
Questo potrebbe fallire (produrre un output strano) se hai ritorni a capo in alcuni nomi di directory ma non in altri.
vimdiff <(cd dir1; find . | sort) <(cd dir2; find . | sort)
ti darà una bella visualizzazione affiancata delle due gerarchie di directory con tutte le sezioni comuni piegate.
Di solito uso rsync
per questa attività:
rsync -nav --delete DIR1/ DIR2
STAI MOLTA ATTENZIONE per usare sempre il -n
, noto anche come --dry-run
, opzione, oppure sincronizzerà (modifica il contenuto delle) directory.
Questo confronterà i file in base ai tempi e alle dimensioni di modifica dei file... penso questo è quello che vuoi veramente, o almeno non ti dispiace se lo fa? Ho la sensazione che tu voglia solo che accada più velocemente , non che tu ne abbia bisogno per ignorare la differenza tra i contenuti dei file. Se vuoi che non elenchi file diversi con nomi identici, penso che l'aggiunta del --ignore-existing
l'opzione lo farà.
Tieni anche presente che non inserire un /
alla fine di DIR1
farà confrontare la directory DIR1
con i contenuti di DIR2
.
L'output finisce per essere un po' prolisso, ma ti mostrerà quali file/directory differiscono. File/directory presenti in DIR2
e non in DIR1
sarà preceduto dalla parola deleting
.
Per alcune situazioni, la risposta di @slartibartfast potrebbe essere più appropriata, anche se dovrai rimuovere -type d
opzione per abilitare l'elenco dei file non di directory. rsync
sarà più veloce se hai un numero significativo di file/directory da confrontare.