Câu trả lời:
Bạn có thể sử dụng diff
lệnh cho điều đó:
diff -bur folder1/ folder2/
Điều này sẽ tạo ra một khác biệt đệ quy mà bỏ qua khoảng trắng, với bối cảnh thống nhất:
-b
bỏ qua thay đổi khoảng trắng và -u
đưa ra 3 dòng đệm.
diff -rub folder1/ folder2/
-bur
sẽ dễ nhớ nếu bạn sống ở vùng khí hậu lạnh.
Nếu bạn chỉ muốn xem các tệp khác nhau, bạn có thể sử dụng:
diff -qr dir_one dir_two | sort
Tùy chọn "q" sẽ chỉ hiển thị các tệp khác nhau chứ không hiển thị nội dung khác nhau và "sắp xếp" sẽ sắp xếp đầu ra theo thứ tự bảng chữ cái.
diff
trên mỗi cặp các tập tin khác nhau. Cách tiếp cận của một người sẽ rất khác nhau nếu chỉ có một hoặc hai tệp khác nhau so với nếu hàng tá tệp khác nhau. Tôi có thể bị mất đầu ra từ diff
ing hàng chục tệp cùng một lúc!
-x PATTERN
trong lệnh để loại trừ một số thư mục con nhất định. Ví dụ: diff -qr repo1 repo2 -x ".git"
sẽ so sánh hai thư mục (repo1 và repo2) nhưng sẽ loại trừ các tệp trong thư mục .git của các thư mục tương ứng.
Nếu đó là GNU diff thì bạn chỉ có thể trỏ nó vào hai thư mục và sử dụng tùy chọn -r.
Nếu không, hãy thử sử dụng
for i in $(\ls -d ./dir1/*); do diff ${i} dir2; done
NB Như Dennis đã chỉ ra trong phần bình luận, bạn thực sự không cần phải thực hiện thay thế lệnh trên ls. Tôi đã làm điều này quá lâu đến nỗi tôi làm việc này rất nhiều trong chế độ lái tự động và thay thế lệnh tôi cần để lấy danh sách các tệp để so sánh.
Ngoài ra, tôi quên thêm rằng tôi làm '\ ls' để tạm thời vô hiệu hóa bí danh ls của mình thành GNU ls để tôi mất thông tin định dạng màu từ danh sách được GNU ls trả về.
ls
:for i in ./dir1/*
Đây là một kịch bản để hiển thị sự khác biệt giữa các tệp trong hai thư mục. Nó hoạt động đệ quy. Thay đổi dir1 và dir2.
(search() { for i in $1/*; do [ -f "$i" ] && (diff "$1/${i##*/}" "$2/${i##*/}" || echo "files: $1/${i##*/} $2/${i##*/}"); [ -d "$i" ] && search "$1/${i##*/}" "$2/${i##*/}"; done }; search "dir1" "dir2" )
Nếu bạn đặc biệt không muốn so sánh nội dung của các tệp và chỉ kiểm tra xem cái nào không có trong cả hai thư mục, bạn có thể so sánh danh sách các tệp, được tạo bởi một lệnh khác.
diff <(find DIR1 -printf '%P\n' | sort) <(find DIR2 -printf '%P\n' | sort) | grep '^[<>]'
-printf '%P\n'
nói find
không đường dẫn đầu ra tiền tố với thư mục gốc.
Tôi cũng đã thêm sort
để đảm bảo thứ tự các tệp sẽ giống nhau trong cả hai cuộc gọi của find
.
Các grep
cuối cùng loại bỏ thông tin về dòng đầu vào giống hệt nhau.
Thử cái này:
diff -rq /path/to/folder1 /path/to/folder2
diff
lệnh bằng cách tải xuống các tiện ích GNU cho Win32 .