chỉnh sửa để chỉnh sửa & tùy chọn rõ ràng - Tôi quên '--brief'
diff -rs --brief "$dir1" "$dir2"
-r, --recursive recursively compare any subdirectories found
-s, --report-identical-files report when two files are the same
-q, --brief report only when files differ
--speed-large-files assume large files and many scattered small changes
và thêm các tùy chọn khác để nếm thử, tùy thuộc vào những gì bạn đang so sánh:
-i, --ignore-case ignore case differences in file contents
-b, --ignore-space-change ignore changes in the amount of white space
-B, --ignore-blank-lines ignore changes whose lines are all blank
--strip-trailing-cr strip trailing carriage return on input
--ignore-file-name-case ignore case when comparing file names
diff -rs sẽ đọc từng byte của bản gốc và bản sao và các tệp báo cáo giống nhau.
Định dạng đầu ra khác được định nghĩa bởi POSIX, vì vậy nó khá dễ mang theo. Bạn có thể muốn thêm một cái gì đó như:
| tee khác nhau.1 | grep -v -Ee 'Tệp. * và. * giống hệt nhau'
Bạn có thể sử dụng chksums hoặc băm, nhưng sau đó bạn phải giữ chúng đồng bộ hóa với các cây tệp, vì vậy dù sao bạn cũng sẽ quay lại để đọc từng byte của mỗi tệp.
EDIT - quá dài để trở thành một nhận xét, để đáp lại:
các tệp trên 10 GB không được xác minh
Bạn có thể muốn thử tùy chọn khác này: - tệp tốc độ lớn
Có thể là khác biệt bạn đang sử dụng không đối phó tốt với các tệp rất lớn (ví dụ lớn hơn bộ nhớ hệ thống) và do đó báo cáo sự khác biệt giữa các tệp thực sự giống nhau.
Tôi đã nghĩ rằng có một tùy chọn -h hoặc 'bdiff' hoạt động tốt hơn trên các tệp lớn, nhưng tôi không thể tìm thấy tùy chọn nào trong Fedora. Tôi tin rằng các tùy chọn --speed-tệp lớn là sự kế thừa cho tùy chọn "so sánh nửa vời".
Một cách tiếp cận khác sẽ là lặp lại lệnh rsync mà bạn đã sử dụng, với '-vin' (verbose, itemize, no_run). Điều này sẽ báo cáo bất kỳ sự khác biệt nào mà rsync tìm thấy - và không nên có bất kỳ sự khác biệt nào.
Để di chuyển một số tệp, bạn đang xem một tập lệnh như:
if [ cmp -s "$dir1/$path" "$dir2/$path" ] ; then
target="$dir2/verified/$path"
mkdir -p $(basename "$target")
mv "$dir2/$path" "$target"
fi
nhưng tôi không khuyên bạn nên làm điều đó. Câu hỏi cơ bản là "làm thế nào tôi có thể chắc chắn rằng rsync sao chép chính xác hệ thống phân cấp tệp?" và nếu bạn có thể tự chứng minh rằng rsync đang hoạt động tốt, với diff hoặc một số công cụ khác, thì bạn chỉ có thể dựa vào rsync, thay vì làm việc xung quanh nó.
rsync -vin sẽ so sánh dựa trên bất kỳ tùy chọn nào khác mà bạn cung cấp cho nó. Tôi nghĩ rằng nó được mặc định là tổng kiểm tra, nhưng bạn đã đúng, -c hoặc --checksum là bắt buộc cho điều đó.
Tiện ích diff thực sự dành cho các tệp của dòng văn bản, nhưng nó phải báo cáo "giống hệt" cho các tệp nhị phân.
--Brief nên chặn bất kỳ đầu ra nội dung tệp nào - lời xin lỗi của tôi vì đã xem trước đó - nó đã bị chôn vùi trong một tập lệnh xấu xí.