Có một công cụ khác biệt sâu Linux cũng so sánh các thuộc tính tệp?


16

Có một công cụ Linux như diff sẽ so sánh đệ quy các tệp và thư mục, nhưng với việc bổ sung cũng so sánh: các thuộc tính mở rộng, acl's, se bối cảnh?


1
Các câu trả lời được cung cấp hoạt động để làm một lần trong một so sánh. Nhưng, chúng không đủ để thực hiện các loại so sánh này nhiều lần trong một giờ khi kiểm tra phần mềm. Tôi có thể có xu hướng sửa đổi mã nguồn diff để bao gồm các so sánh này.
Michael Gantz

Câu trả lời:


7

Tôi đã làm điều này trước khi sử dụng rsync -aHAX --deleteghi nhớ để thêm -n-icờ.

Điều này hơi phản trực giác, nhưng hãy chịu đựng tôi. Lệnh chính rsynclà những gì bạn sẽ cần để đồng bộ hai thư mục với nhau. Nhưng -n -ilàm cho nó KHÔNG đồng bộ hóa (tức là chạy khô) và chỉ in ra những gì nó sẽ làm và tại sao. Thật không tuyệt vời khi phân tích cú pháp, nhưng bạn có thể lấy tên tệp ra một cách dễ dàng và chuyển sang lshoặc tương tự.

Điều này sẽ xem xét tất cả mọi thứ bao gồm mtimes, ngày, v.v., cũng như không theo dõi trên các nút thiết bị, ổ cắm, đường ống có tên, v.v ... Dòng lệnh ở trên cũng nhìn vào ACL và các thuộc tính mở rộng. Bạn có thể điều chỉnh những gì bạn đang xem bằng cách thay đổi các tùy chọn rsync, giới hạn nó ở một thiết bị -x, thay đổi hành vi liên kết mềm & cứng, v.v.


2

janos đã nói phải làm gì:

find /a -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >a
find /b -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >b

diff -u a b

man 1 statnói:

%A     access rights in human readable form
%C     SELinux security context string
%F     file type
%g     group ID of owner
%u     user ID of owner
%s     total size, in bytes
%Y     time of last modification, seconds since Epoch
%n     file name

Để so sánh nội dung tập tin bạn có thể sử dụng:

find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35-

as described here: http://www.commandlinefu.com/commands/view/3555/find-duplicate-files-based-on-size-first-then-md5-hash

Giải pháp này không cung cấp một giải pháp khả thi. Khác biệt được hiển thị là bối cảnh miễn phí và quá khó đọc. Tôi đang tìm kiếm một cái gì đó có thể cho tôi thấy một tên tập tin và những gì khác nhau về nó. Không phải là một khác biệt trên hai tìm thấy đó là một con thú hoàn toàn khác nhau.
Michael Gantz

1
GNU findcó các tính năng của GNU statđược tích hợp (và có trước GNU stat trong nhiều thập kỷ). Bạn cũng sẽ muốn sắp xếp đầu ra trước khi khác. Và bạn cần (cd /a && find . ...)nếu không tất cả các dòng sẽ khác nhau vì /aso với /btrong đường dẫn tệp.
Stéphane Chazelas

0

Đây là một tập lệnh bash nhanh mà tôi đã viết để so sánh các thuộc tính mở rộng. Nó in ra mọi tên tệp và sau đó là bất kỳ sự khác biệt nào trong các thuộc tính:

cd a
export relpath=[path/to/b/from/a]

for filename in $(find .);
do
    echo $filename;
    diff <(xattr -l $filename) <(xattr -l $relpath/$filename);
done

Mượn từ một câu trả lời khác, chúng tôi có thể sửa đổi điều này để sử dụng statthay vì xattr:

for filename in $(find .);
do
    echo $filename;
    diff <(stat -c '%A %C %F %g %u %s %Y' $filename) <(stat -c '%A %C %F %g %u %s %Y' $relpath/$filename);
done
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.