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.