Mam kilka plików w katalogu i chcę sprawdzić, czy wszystkie są unikalne. Dla uproszczenia załóżmy, że mam trzy pliki: foo.txt
, bar.txt
i baz.txt
. Jeśli uruchomię tę pętlę, sprawdzę je wszystkie względem siebie:
$ 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
W przypadku setek plików, z którymi chcę sobie poradzić, byłoby to dość nieczytelne; lepiej byłoby wymienić pliki, które pasują, a następnie mogę szybko przejrzeć listę i upewnić się, że pliki pasują tylko do siebie. Z tej strony pomyślałbym, że -s
opcja by to osiągnęła:
$ 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
... jednak w rzeczywistości drukuje również całą zawartość wszystkich plików, które się różnią. Czy jest jakiś sposób na powstrzymanie tego zachowania, więc dostaję tylko powyższe zachowanie?
Alternatywnie, czy jest jakieś inne narzędzie, które może to osiągnąć ?