Tôi có một số tệp trong một thư mục và tôi muốn kiểm tra xem chúng có phải là duy nhất không. Để đơn giản, giả sử tôi có ba tập tin: foo.txt
, bar.txt
và baz.txt
. Nếu tôi chạy vòng lặp này, tôi sẽ kiểm tra tất cả chúng với nhau:
$ 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
Đối với hàng trăm tệp tôi muốn xử lý, điều này sẽ trở nên khá khó đọc; nó sẽ là tốt hơn để liệt kê các tập tin mà làm trận đấu, và sau đó tôi có thể nhìn qua danh sách một cách nhanh chóng và đảm bảo rằng tập tin được chỉ phù hợp với bản thân. Từ trang này, tôi đã nghĩ rằng -s
tùy chọn sẽ thực hiện điều này:
$ 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
... tuy nhiên, trên thực tế, nó cũng in ra toàn bộ nội dung của bất kỳ tệp nào khác nhau. Có cách nào để ngăn chặn hành vi này, vì vậy tôi chỉ nhận được hành vi trên?
Ngoài ra, có một số công cụ khác có thể thực hiện điều này ?