Confrontare cartelle macOS Terminale con diff
Confrontare cartelle macOS Terminale è possibile con diff, uno strumento già disponibile in macOS che analizza file e directory senza installare applicazioni aggiuntive. Il comando permette di individuare file modificati, presenti soltanto in una delle due cartelle oppure completamente identici. Con l’opzione ricorsiva -r, il confronto comprende anche tutte le sottocartelle. L’opzione -q, invece, riduce l’output alle sole differenze, rendendo il risultato più leggibile quando si controllano backup, copie di progetti o archivi trasferiti tra Mac.
Come confrontare due cartelle con diff su macOS
Apri Terminale dalla cartella Applicazioni oppure usando Spotlight. Il comando base per confrontare due directory è il seguente:
diff -rq "/percorso/cartella-originale" "/percorso/cartella-copia"
L’opzione -r ordina a diff di eseguire il confronto in modo ricorsivo, includendo le sottocartelle. L’opzione -q, abbreviazione di “brief”, mostra soltanto un messaggio sintetico quando trova una differenza, invece di stampare riga per riga il contenuto diverso.
Per esempio, due cartelle presenti nella Scrivania possono essere confrontate così:
diff -rq "$HOME/Desktop/Progetto-originale" "$HOME/Desktop/Progetto-copia"
Il percorso $HOME identifica la cartella dell’utente attualmente collegato a macOS. Le virgolette sono importanti quando un nome contiene spazi, parentesi o altri caratteri interpretati dalla shell Zsh, utilizzata normalmente dalle versioni recenti di macOS.
Il comando non modifica alcun file: diff legge le due directory e visualizza soltanto il risultato dell’analisi. Se le cartelle sono identiche, il Terminale non mostra alcun testo e il comando termina senza segnalare differenze.
Come interpretare l’output di diff
Il risultato di diff -rq distingue principalmente tra file modificati e file presenti soltanto in una delle due cartelle. Le righe più comuni hanno questi significati:
Files ... and ... differ: i due file esistono in entrambe le cartelle, ma il loro contenuto non è uguale.Only in ...: il file o la sottocartella esiste soltanto nel percorso indicato.- Nessun output: le cartelle analizzate risultano uguali secondo il confronto eseguito.
Un output come questo indica che config.json è stato modificato e che bozza.txt si trova soltanto nella cartella originale:
Files /Users/mario/Progetto-originale/config.json and /Users/mario/Progetto-copia/config.json differ Only in /Users/mario/Progetto-originale: bozza.txt
La dicitura Files ... differ non spiega quali righe siano cambiate e non indica automaticamente quale file sia più recente. Significa soltanto che il contenuto binario dei due file non coincide. Per stabilire quali righe sono state aggiunte, rimosse o modificate è necessario eseguire il confronto dettagliato.
Per ottenere esclusivamente l’elenco dei file presenti in entrambe le directory ma con contenuto diverso, si può filtrare l’output con grep:
diff -rq "/percorso/cartella-originale" "/percorso/cartella-copia" | grep ' differ$'
Questo filtro elimina le righe che iniziano con Only in e mantiene le segnalazioni relative ai file modificati. Se non viene stampato nulla, non risultano file comuni con contenuto differente; potrebbero comunque esistere file presenti soltanto in una delle due directory.
Come vedere le righe modificate nei file
Per visualizzare le differenze effettive tra file di testo, usa diff con le opzioni ricorsiva e unificata:
diff -ru "/percorso/cartella-originale" "/percorso/cartella-copia"
L’opzione -u produce il formato unificato, utilizzato anche da molti strumenti di sviluppo. Le righe precedute dal simbolo - appartengono al primo percorso, mentre quelle precedute da + appartengono al secondo percorso. Le righe che iniziano con uno spazio sono presenti in entrambe le versioni e servono a contestualizzare la modifica.
Per includere nel confronto dettagliato anche i file presenti soltanto in una delle due cartelle, puoi aggiungere -N:
diff -ruN "/percorso/cartella-originale" "/percorso/cartella-copia"
Con -N, un file mancante viene trattato come se fosse vuoto, così diff può mostrare il contenuto che esiste nell’altra cartella. Questa modalità è utile per confrontare directory di codice, configurazioni o documenti di testo. Sui file binari, come immagini, video, archivi ZIP e molti documenti proprietari, il comando segnala che i file differiscono senza mostrare modifiche leggibili.
È possibile confrontare anche due singoli file quando l’analisi delle cartelle ha evidenziato una differenza:
diff -u "/percorso/cartella-originale/impostazioni.txt" "/percorso/cartella-copia/impostazioni.txt"
Il confronto con -u è più utile di -q quando serve capire esattamente che cosa è stato modificato. Per file molto grandi, l’output può essere esteso; in quel caso è possibile salvarlo in un file di testo:
diff -ruN "/percorso/cartella-originale" "/percorso/cartella-copia" > confronto.txt
Come verificare con certezza se due file sono uguali
Quando diff -rq segnala una differenza, il comando cmp permette di controllare due file byte per byte senza stampare tutto il loro contenuto. L’opzione -s rende il confronto silenzioso e consente di usare un semplice controllo condizionale:
if cmp -s "/percorso/cartella-originale/file.dat" "/percorso/cartella-copia/file.dat"; then echo "File identici" else echo "File diversi" fi
cmp restituisce un risultato diverso da zero quando i file non coincidono o quando uno dei percorsi non è accessibile. Per un controllo basato sull’impronta dei file, macOS include il comando shasum:
shasum -a 256 "/percorso/cartella-originale/file.dat" shasum -a 256 "/percorso/cartella-copia/file.dat"
Due file con lo stesso valore SHA-256 risultano, dal punto di vista pratico, uguali. Il confronto tramite hash richiede però che i file siano già stati individuati e verificati a coppie: shasum non confronta automaticamente due cartelle e non segnala i file mancanti.
Per controllare il risultato restituito da diff, puoi leggere il codice di uscita del comando subito dopo l’esecuzione:
diff -rq "/percorso/cartella-originale" "/percorso/cartella-copia" echo $?
Il codice 0 indica che non sono state trovate differenze, il codice 1 indica che esistono differenze e un codice superiore segnala in genere un errore, come un percorso inesistente o un problema di permessi. Il testo stampato e il codice di uscita svolgono quindi funzioni diverse: il primo descrive le differenze, il secondo consente di automatizzare verifiche in script o procedure di backup.
Prima del confronto, controlla che entrambe le directory siano realmente accessibili e che il percorso sia scritto correttamente. Finder può mostrare nomi abbreviati o cartelle sincronizzate non ancora disponibili localmente, mentre diff lavora sui file effettivamente presenti nel file system. Se una directory appartiene a un altro utente o ha permessi restrittivi, il Terminale può restituire messaggi di errore invece di completare l’analisi.
Confrontare cartelle macOS Terminale con diff consente di controllare rapidamente backup e copie, distinguendo file modificati, mancanti e identici senza alterare i dati.
FAQ
Sì, diff è incluso negli strumenti standard di macOS e può essere eseguito direttamente dal Terminale senza installare software aggiuntivo.
Racchiudi ogni percorso tra virgolette doppie, per esempio diff -rq "/Users/mario/Vecchia cartella" "/Users/mario/Nuova cartella".
Esegui diff -rq e cerca le righe Files ... differ. Queste righe indicano file presenti in entrambe le cartelle ma con contenuto differente.
Le immagini sono file binari, quindi diff può indicare che sono diverse ma non può rappresentare le variazioni come righe di testo. Per verificare l’identità puoi usare cmp o confrontare gli hash SHA-256.
Significa che le due cartelle non presentano differenze rilevate dal comando, inclusi file e sottocartelle analizzati ricorsivamente.
Altri articoli di questa serie:
- Mostrare file nascosti macOS Terminale: comando rapido
- Disattivare riapertura finestre macOS: metodo rapido
- Personalizzare anteprime icone Finder con defaults
- Percorso completo Finder macOS nella barra del titolo
- Disattivare DS_Store unità di rete Mac: metodo rapido
- Ricerca metadati Spotlight Terminale con mdls e mdfind
- Ricostruire indice Spotlight macOS Terminale
- Controllare consumo energetico Mac Terminale con powermetrics
- Trovare i processi che rallentano il Mac da Terminale
- Controllare la pressione memoria macOS Terminale
- Come misurare l’avvio lento delle app su Mac
- Leggere log macOS da Terminale: comandi utili
- Rapporto processi bloccati macOS spindump: come crearlo
- Verificare firma applicazioni macOS Terminale
- Permessi privacy delle app Mac: come controllarli
- Gestire programmi avvio automatico macOS con launchctl
- Creare servizio launchd macOS per attività periodiche
- Rinominare file in massa su macOS dal Terminale
- Proteggere file sensibili su macOS dal Terminale
