Làm thế nào để khác biệt tên tệp trong hai thư mục (không ghi vào tệp trung gian)?


31

Tôi đang cố gắng làm một cái gì đó dọc theo dòng:

diff `ls -1a ./dir1` `ls -1a ./dir2`

Nhưng điều đó không làm việc vì lý do rõ ràng. Có cách nào tốt hơn để đạt được điều này (trong 1 dòng), hơn thế này không?

ls -1a ./dir1 > lsdir1
ls -1a ./dir2 > lsdir2
diff lsdir1 lsdir2

Cảm ơn

Câu trả lời:



10
diff -rq dir1 dir2

sử dụng tùy chọn -r, đi bộ toàn bộ cây thư mục, kiểm tra đệ quy sự khác biệt giữa các thư mục con và tệp xảy ra tại các điểm có thể so sánh trong mỗi cây. Mẹo nhỏ là sử dụng tùy chọn -q để loại bỏ so sánh từng dòng


3
@festo: Bạn muốn bỏ qua câu hỏi này, tôi thực sự không muốn tìm khác biệt nội dung của các tập tin, tôi muốn tìm khác biệt đầu ra của các lslệnh
bguiz

+1, Trên thực tế, tôi đã nhận được cùng một đầu ra với một cảnh báo, diff -rq đã báo cáo một tệp được liên kết là 'Không có tệp hoặc thư mục như vậy'. Vì vậy, cộng với một cho sử dụng chính xác, và thẳng thắn đơn giản hơn. (ngay cả khi câu trả lời của IVA là 'cơ hội học tập' tốt hơn để thay thế quy trình (> _ <)
xtian

1
Đây là nhiều chậm hơn so với diffing tên file: toàn bộ tất cả các tập tin đã được đọc và so sánh.
Zaz

@Josh tất nhiên, vì nó đệ quy ....
Braiam

1
@Braiam: Thậm chí nếu bạn đệ quy diff tên tập tin (sử dụng rsyncvới các --dry-runtùy chọn, ví dụ), nó vẫn sẽ là nhanh hơn nhiều so diff -r.
Zaz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.