Esistono strumenti Linux / Unix che trovano tutti i file in una directory non presenti in un'altra? Fondamentalmente sto cercando diff che funziona sull'output di ls.
Sono apprezzati anche script brevi e dolci.
Esistono strumenti Linux / Unix che trovano tutti i file in una directory non presenti in un'altra? Fondamentalmente sto cercando diff che funziona sull'output di ls.
Sono apprezzati anche script brevi e dolci.
Risposte:
diff
fa già questo:
diff dir1 dir2
Esempio di output:
Only in dir1: some_file.txt
Only in dir1: some_other_file.txt
Only in dir2: third_file.txt
bash:
diff <(cd dir1; ls) <(cd dir2; ls)
Confronta solo i nomi dei file, non i contenuti dei file.
ls
, utilizzare find
invece!
Se vuoi farlo anche attraverso tutte le sottodirectory, un buon modo per farlo è:
diff --brief -r dir1/ dir2/
Preferisco usare brief, ma puoi lasciarlo fuori se vuoi.
Questo funziona ..
ls -a1 /dir1 | sort > /tmp/1
ls -a1 /dir2 | sort > /tmp/2
diff /tmp/1 /tmp/2
Dennis Williamson aveva una buona risposta , ma dovevo farlo in modo ricorsivo. GNU findutils 4.7.0 non ordina il suo output, quindi ecco cosa ho usato
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort)
Per fare questo in un solo modo e produrre un elenco di file, ho usato questo:
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort) \
| grep '< ./' | sed "s,< ./,$dir1/,"
Affinché ciò funzioni correttamente, né $ dir1 né $ dir2 dovrebbero includere la barra finale.
diff dir1 dir2 | grep "Only"