Có công cụ Linux / Unix nào tìm thấy tất cả các tệp trong một thư mục không có trong thư mục khác không? Về cơ bản tôi đang tìm kiếm diff hoạt động trên đầu ra của ls.
Kịch bản ngắn và ngọt ngào cũng được đánh giá cao.
Có công cụ Linux / Unix nào tìm thấy tất cả các tệp trong một thư mục không có trong thư mục khác không? Về cơ bản tôi đang tìm kiếm diff hoạt động trên đầu ra của ls.
Kịch bản ngắn và ngọt ngào cũng được đánh giá cao.
Câu trả lời:
diff
đã làm điều này rồi:
diff dir1 dir2
Ví dụ đầu ra:
Only in dir1: some_file.txt
Only in dir1: some_other_file.txt
Only in dir2: third_file.txt
Bash:
diff <(cd dir1; ls) <(cd dir2; ls)
Chỉ so sánh tên tệp - không phải nội dung của các tệp.
ls
, sử dụng find
thay thế!
Giống như mọi người nói với bạn ở đây, bạn có thể sử dụng DIFF trong các biến thể sử dụng khác nhau. Hoặc bạn chỉ sử dụng dirdiff
thay thế, có nghĩa là cho những gì bạn đang cố gắng! :-)
Nhưng nếu bạn muốn giữ một số thư mục đồng bộ thì bạn thực sự nên xem qua rsync
.
Trân trọng
Nếu bạn cũng muốn làm điều này thông qua tất cả các thư mục con, một cách tốt để làm điều đó là:
diff --brief -r dir1/ dir2/
Tôi thích sử dụng ngắn gọn, nhưng bạn có thể bỏ nó ra nếu bạn muốn.
Dennis Williamson đã có một câu trả lời tốt , nhưng tôi cần phải làm điều này một cách đệ quy. GNU findutils 4.7.0 không sắp xếp đầu ra của nó, vì vậy đây là những gì tôi đã sử dụng
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort)
Để làm điều này chỉ có một cách và tạo một danh sách các tệp, tôi đã sử dụng cách này:
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort) \
| grep '< ./' | sed "s,< ./,$dir1/,"
Để điều này hoạt động chính xác, cả $ dir1 và $ dir2 đều không bao gồm dấu gạch chéo.
diff dir1 dir2 | grep "Only"