Tôi đang tìm kiếm một cách nhanh chóng để so sánh nội dung thư mục. Có thể thực hiện một md5sum (hoặc tổng kiểm tra tương đương) của toàn bộ thư mục không?
Sử dụng Ubuntu Linux
Tôi đang tìm kiếm một cách nhanh chóng để so sánh nội dung thư mục. Có thể thực hiện một md5sum (hoặc tổng kiểm tra tương đương) của toàn bộ thư mục không?
Sử dụng Ubuntu Linux
Câu trả lời:
Chắc chắn rồi - md5sum directory/*
Nếu bạn cần một cái gì đó linh hoạt hơn một chút (giả sử, để đệ quy thư mục hoặc so sánh băm), hãy thử md5deep.
apt-get install md5deep
md5deep -r directory
Để so sánh cấu trúc thư mục, bạn có thể cung cấp cho nó một danh sách các giá trị băm để so sánh với:
md5deep -r -s /directory1 > dir1hashes
md5deep -r -X dir1hashes /directory2
Điều này sẽ xuất ra tất cả các tệp trong thư mục2 không khớp với thư mục1.
Điều này sẽ không hiển thị các tệp đã bị xóa khỏi thư mục1 hoặc các tệp đã được thêm vào thư mục2.
-j0
để vô hiệu hóa đa luồng (xem trang hướng dẫn).
md5deep
với sudo apt-get install md5deep
trên Ubuntu 16.04
nhưng khi tôi cố gắng đọc man page của nó nói với tôi rằng> Không bài hướng dẫn về md5deep
Nếu bạn muốn xem có gì khác nhau (nếu có gì) giữa hai thư mục, rsync sẽ phù hợp.
rsync --archive --dry-run --checksum --verbose /source/directory/ /destination/directory
Điều này sẽ liệt kê bất kỳ tập tin nào khác nhau.
diff -qr /source/directory/ /destination/directory/
cũng sẽ hiển thị các tập tin khác nhau.
username@hostname:/destination/directory
tôi nghĩ rằng tôi đã trả lời câu hỏi này trước đây với câu trả lời này:
find . -xtype f -print0 | xargs -0 sha1sum | cut -b-40 | sort | sha1sum
cho: b1a5b654afee985d5daccd42d41e19b2877d66b1
ý tưởng là bạn băm tất cả các tệp cắt bỏ băm một dòng trên mỗi dòng, sắp xếp chúng và băm mang lại một hàm băm duy nhất. Điều này không phụ thuộc vào tên của các tập tin.
Các cfv ứng dụng là khá hữu ích, không chỉ nó có thể kiểm tra và tạo checksum MD5, nó cũng có thể làm CRC32, sha1, torrent, mệnh, par2.
để tạo tệp tổng kiểm tra CRC32 cho tất cả các tệp trong thư mục hiện tại:
cfv -C
để tạo tệp tổng kiểm MD5 cho tất cả các tệp trong thư mục hiện tại:
cfv -C -t md5 -f "thư mục hiện tại.md5sums"
Để tạo một tệp tổng kiểm tra riêng cho mỗi thư mục con:
cfv -C -r
Để tạo một tệp tổng kiểm tra "siêu" chứa các tệp trong tất cả các thư mục con:
cfv -C -rr
Tôi đã sử dụng hashdeep, như được giải thích trong câu trả lời của Askubfox này: Kiểm tra tính chính xác của các tệp được sao chép :
Để tính toán tổng kiểm tra:
$ cd <directory1>
$ hashdeep -rlc md5 . > ~/hashOutput.txt
Để xác minh và liệt kê sự khác biệt:
$ cd <directory2>
$ hashdeep -ravvl -k ~/hashOutput.txt .
hashdeep: Audit passed
Input files examined: 0
Known files expecting: 0
Files matched: 13770
Files partially matched: 0
Files moved: 0
New files found: 0
Known files not found: 0
Điều này có một lợi thế so với md5deep ở chỗ nó sẽ hiển thị các tệp đã được đổi tên (đã di chuyển), đã thêm và xóa, cũng như tránh sự cố với các tệp có độ dài 0 được chỉ ra ở dưới cùng của http://www.meridiandiscovery.com/how- đến / xác thực-sao chép-kết quả-sử dụng-md5deep .
Bạn có thể tạo tổng MD5 của mỗi tệp đơn lẻ, sắp xếp các tổng kiểm này theo thứ tự bảng chữ cái và có chúng (có hoặc không có dòng mới). Vì MD5 là mật mã, nên nó chỉ hoạt động tốt với băm băm.
Cần có một thứ tự nhất định cho mọi thứ, nếu không bạn sẽ nhận được kết quả khác nhau cho các thư mục bằng nhau.
Và bạn nên xem xét rằng việc thêm một số tập tin vào một thư mục hoàn toàn sẽ thay đổi kết quả, thậm chí nếu nó chỉ là một .directory
của .DS_Store
tập tin.
Trong trường hợp cụ thể, giả sử bạn muốn sao chép một số tệp từ thư mục1 sang thư mục 2 và sau đó bạn muốn xác minh bản sao thành công bằng cách sử dụng so sánh md5.
Đầu tiên. cd vào thư mục1 và gõ:
find -type f -exec md5sum "{}" \; > ~/Desktop/md5sum.txt
sẽ tạo một tệp tham chiếu chứa tổng md5 cho mỗi tệp trong thư mục1. Một khi điều này được thực hiện, tất cả những gì bạn phải làm là cd vào thư mục2 và gõ:
md5sum -c ~/Desktop/md5sum.txt
Chương trình md5sum tìm nạp từng đường dẫn từ tệp md5sum.txt, tính toán md5sum của tệp đó trong thư mục đích và sau đó so sánh nó với tổng mà nó đã lưu trong tệp.
Sau khi quá trình hoàn tất, bạn sẽ nhận được một bản tóm tắt, chẳng hạn như 'Vì vậy, rất nhiều tệp không khớp với nhau' hoặc đại loại như thế.
Tôi đã có nhu cầu xác minh tính toàn vẹn của các bản sao lưu / gương chứa một số lượng lớn tệp và cuối cùng đã viết một chương trình dòng lệnh có tên là MassHash. Nó được viết bằng Python. Trình khởi chạy GTK + cũng có sẵn. Bạn có thể muốn kiểm tra ...