Come differire i nomi dei file in due directory (senza scrivere in file intermedi)?


31

Sto cercando di fare qualcosa sulla falsariga di:

diff `ls -1a ./dir1` `ls -1a ./dir2`

Ma ciò non funziona per ovvi motivi. C'è un modo migliore per raggiungere questo obiettivo (in 1 riga) rispetto a questo?

ls -1a ./dir1 > lsdir1
ls -1a ./dir2 > lsdir2
diff lsdir1 lsdir2

Grazie

Risposte:



10
diff -rq dir1 dir2

usando l'opzione -r, percorri interi alberi di directory, controllando ricorsivamente le differenze tra sottodirectory e file che si verificano in punti comparabili in ciascun albero. Il trucco è usare l'opzione -q per sopprimere i confronti riga per riga


3
@festo: ti dispiacerebbe perdere la nozione di questa domanda, in realtà non voglio diffondere il contenuto dei file, voglio diffondere l'output dei lscomandi
bguiz

+1, In realtà, ho ottenuto lo stesso output con un avvertimento, diff -rq ha riportato un file collegato come 'Nessun file o directory'. Quindi, più uno per un utilizzo corretto e francamente più semplice. (anche se la risposta di IVA è una migliore "opportunità di apprendimento" per la sostituzione del processo (> _ <)
xtian

1
Questo è molto più lento della differenza tra i nomi dei file: l'intero file deve essere letto e confrontato.
Zaz,

@Josh ovviamente, perché lo fa in modo ricorsivo ....
Braiam,

1
@Braiam: anche se differisci ricorsivamente i nomi dei file (usando rsynccon l' --dry-runopzione, per esempio), sarebbe comunque molto più veloce di diff -r.
Zaz,
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.