Ho un numero di file in una directory e voglio verificare che siano tutti unici. Per semplicità, diciamo che ho tre file: foo.txt
, bar.txt
e baz.txt
. Se eseguo questo ciclo, li controllerò tutti l'uno contro l'altro:
$ for f in ./*; do for i in ./*; do diff -q "$f" "$i"; done; done
Files bar.txt and baz.txt differ
Files bar.txt and foo.txt differ
Files baz.txt and bar.txt differ
Files baz.txt and foo.txt differ
Files foo.txt and bar.txt differ
Files foo.txt and baz.txt differ
Per le centinaia di file che voglio trattare, questo diventerebbe piuttosto illeggibile; sarebbe meglio per elencare i file che fanno match, e quindi posso guardare oltre l'elenco in modo rapido e fare in modo che i file siano in abbinamento solo se stessi. Dalla manpage, avrei pensato che l' -s
opzione avrebbe ottenuto questo risultato:
$ for f in ./*; do for i in ./*; do diff -s "$f" "$i"; done; done
Files bar.txt and bar.txt are identical
Files baz.txt and baz.txt are identical
Files foo.txt and foo.txt are identical
... tuttavia, in realtà anche di stampare l'intero contenuto di tutti i file che differiscono. C'è un modo per sopprimere questo comportamento, quindi ottengo solo il comportamento sopra?
In alternativa, c'è qualche altro strumento che può realizzare questo ?