Tìm tất cả các thư mục trong một thư mục có cùng nội dung


10

Trong Ubuntu, có bất kỳ để tìm các thư mục trùng lặp trong một thư mục (nghĩa là các thư mục có cùng nội dung) không? Tôi nghĩ rằng đã có một số công cụ dòng lệnh có sẵn để tìm các tệp trùng lặp (chẳng hạn như fdupes), nhưng tôi muốn tìm các thư mục trùng lặp thay thế. Đó là, tìm các thư mục khớp với nội dung của các tệp mà chúng chứa (mặc dù tên tệp và siêu dữ liệu khác có thể khác nhau).


Tôi có thể bắt đầu bằng cách tạo danh sách tất cả các thư mục trong một thư mục (được sắp xếp theo độ dài), sau đó kiểm tra từng cặp thư mục có cùng độ dài.
Anderson Green

Xác định "trùng lặp". Các tập tin bên trong phải khớp với nội dung tập tin? Tên tập tin? Số inode? Kích thước tập tin?
Chris Down

@ChrisDown Câu hỏi đã được cập nhật.
Anderson Green

3
Đúng. Thư mục thực sự chỉ là tập tin, vì vậy tuyên bố của bạn là mơ hồ. Để có "cùng một nội dung" trong thực tế có nghĩa là cả hai thư mục đều chứa cùng một tham chiếu inode. Không rõ liệu bạn có nghĩa là, hoặc bạn có nghĩa là các tệp bên trong nên có cùng nội dung hay không và nếu có, liệu có các quy định khác (mtime, tên tệp, v.v.) không.
Chris Xuống

3
@ChrisDown Ý tôi là các tệp bên trong phải có cùng nội dung.
Anderson Green

Câu trả lời:


5
#!/bin/bash
shopt -s dotglob

for file in "$1"/*; do [[ -f "$file" ]] && d1+=( "$(md5sum < "$file")" ); done
for file in "$2"/*; do [[ -f "$file" ]] && d2+=( "$(md5sum < "$file")" ); done 

[[ "$(sort <<< "${d1[*]}")" == "$(sort <<< "${d2[*]}")" ]] && echo "Same" || echo "Different"

Bạn có thể thấy nó hoạt động ở đây:

$ mkdir 1 2
$ ./comparedirs 1 2
Same
$ cat > 1/1 <<< foo
$ cat > 2/1 <<< foo
$ ./comparedirs 1 2
Same
$ cat > 2/1 <<< bar
$ ./comparedirs 1 2
Different

Vì kịch bản này chưa được kiểm tra, tôi rất muốn xem liệu nó có hoạt động theo cách nó được sử dụng không.
Anderson Green

1
@AndersonGreen Kiểm tra câu trả lời cập nhật, kiểm tra nó.
Chris Down

Đẹp! Cũng cần có một thử nghiệm với cat > 1/2 <<< barcat > 2/3 <<< bar để hiển thị nhiều tệp và siêu dữ liệu khác nhau (== "Giống nhau")
nealmcb

@ChrisDown: sắp xếp trong bước cuối cùng cần thiết?
harish.venkat

Kịch bản thanh lịch, chỉ có một lỗi nhỏ là nó trả về Tương tự khi một hoặc cả hai thư mục không tồn tại. Có thể dễ dàng sửa chữa nếu một người viết kịch bản tốt hơn tôi
cosine
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.