Danh sách thư mục nên hoạt động; ví dụ: đây là những gì tôi đã sử dụng trong một tập lệnh (giả sử gnu diff),
diff -r \
--exclude="*~" \
--exclude=".svn" \
--exclude=".git" \
--exclude="*.zip*" \
--exclude="*.gz" \
--exclude="*.tar" \
...etc
... Bỏ qua nội dung .svnvà thư mục .git, nhưng cũng có các tệp riêng lẻ có tên *.zip/ *.gz/ etc.
Chỉnh sửa: Để lọc các đường dẫn của biểu mẫu dir_a/file1nhưng diffcác tệp vẫn có cùng tên cơ sở, chẳng hạn như dir_b/file1hoặc dir_a/b/file1, sau đó, một danh sách các tệp diffsẽ phải được tạo (ví dụ: bằng cách sử dụng find) và tệp để so sánh xuất phát từ các đường dẫn này; ví dụ, được đưa ra
$ find ONE TWO -type f -print
ONE/a/1.txt
ONE/a/2.txt
ONE/a/b/2.txt
TWO/a/1.txt
TWO/a/2.txt
TWO/a/b/2.txt
bạn tạo danh sách các tệp để so sánh, ví dụ như loại trừ */a/2.txtnhưng vẫn so sánh các tệp khác có tên 2.txt. Chỉ cần "tìm" tất cả các tệp ngoại trừ ONE/a/2.txt(một biểu thức chính quy cũng có thể được sử dụng ở đây, chẳng hạn như .*/a/2.txt)
$ find ONE -type f \( ! -regex 'ONE/a/2.txt' \) \
-exec bash -c 'diff -q "${1}" "${2/ONE/TWO}"' - {} {} \;
có hiệu lực bỏ qua ONE/a/2.txt(và TWO/a/2.txt), nhưng vẫn so sánh các tệp khác có tên 2.txt:
diff -q ONE/a/1.txt TWO/a/1.txt
diff -q ONE/a/b/2.txt TWO/a/b/2.txt
Chỉnh sửa: Hoặc, vui hơn với find(thêm niềm vui còn lại dưới dạng bài tập cho người đọc), chọn các tệp hoặc thư mục để loại trừ và sau đó diffmọi thứ khác:
$ find ONE \( -regex 'ONE/a/2.txt' -o -name b -prune \) \
-o -type f -exec bash -c 'echo diff -q "${1}" "${2/ONE/TWO}"' - {} {} \
Ví dụ trên không bao gồm tệp cụ thể "{top} /a/2.txt", bất kỳ thư mục nào có tên "b" và mọi thứ khác đều khác. (Thay vì đơn giản " -name b" bạn cũng có thể sử dụng " -regex '.*/b'" - lưu ý, không có dấu "/".)
diff's--excludelựa chọn là quá shitty ...