Tìm tập tin trong một thư mục không phải trong một thư mục khác


12

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:


20

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

5
Điều này là tốt One gripe: diff thực sự đang chạy trên mỗi tệp trong cả hai. Có một tùy chọn tối nghĩa để chỉ chạy với tên tệp (tôi có thể đã bỏ lỡ nó)? Mặt khác, tôi đề nghịdiff dir1 dir2 | grep "Only"
Willi Ballenthin

wow điều này chỉ giúp tôi tiết kiệm được nhiều phút của kịch bản bash cảm ơn
user5359531


4

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 dirdiffthay 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


3

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.


1

for i in $(ls -1 directory1); do if (test -f directory2/$i) then echo $i; fi; done


0

Những công việc này..

ls -a1 /dir1 | sort > /tmp/1
ls -a1 /dir2 | sort > /tmp/2
diff /tmp/1 /tmp/2

0

chưa được kiểm tra:

find /dir/A -printf "%P" | while read f; do
  if [ ! -e "/dir/B/$f" ]; then
    echo $f
  fi
done

0

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.

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.