কোনও ফোল্ডারে MD5 (বা অনুরূপ) আছে কি? দুটি ফোল্ডার সমান হলে কীভাবে যাচাই করবেন?


10

আমি কোনও md5sumসংরক্ষণাগারকে সংকুচিত না করে কোনও ফোল্ডারের একটি (বা অনুরূপ গণনা) খুঁজে পেতে চাই ।

উদাহরণস্বরূপ, ফোল্ডারে যদি MyFolderআমরা ফাইল আছে 1.txt, 2.txtএবং 3.txt, ধারণকারী:


1.txt

পাঠ্য 1.txt

2.txt

টেক্সটটি 2.txt এ

3.txt

টেক্সট 3.txt


আমি কীভাবে md5sumএই সম্পূর্ণটির গণনা করতে পারি MyFolder? কোন উপায় আছে? দুটি ফোল্ডারে একই বিষয়বস্তু রয়েছে কিনা তা যাচাই করতে আমি এটি ব্যবহার করতে চাই।

দুটি সিডি বা ফোল্ডার সমান কিনা তা যাচাই করতে এটি ব্যবহার করা যেতে পারে। আমি এটি করার একটি সহজ উপায় চাই।

উত্তর:


15

এমডি 5 ডিডিপি সরঞ্জামটি সুনির্দিষ্টভাবে এই উদ্দেশ্যে তৈরি করা হয়েছিল। অনেক লিনাক্স ডিস্ট্রিবিউশন এটি প্যাকেজ আকারে সরবরাহ করে।


1
ধন্যবাদ! এটা আমার জন্য ভাল কাজ। একই সমস্যাযুক্ত অন্যান্য ব্যবহারকারীদের এটি পছন্দ করতে: sudo apt-get install md5deep md5deep -rel /path/to/your/directory/ > directory_hash.md5 md5deep -X directory_hash.md5 -r /path/to/your/second/direcotory অনেক অনেক ধন্যবাদ।
গারউডান

@GarouDan। আপনার প্রদর্শিত আদেশটি প্রতীকী লিঙ্কগুলি অনুসরণ করবে। আপনি -oফাইলের ধরণের হ্যান্ডেল করতে বিকল্পটি ব্যবহার করতে পারেন ।
পিটার.ও

ওহ, আপনি জানেন না ... সত্যিই সহায়ক। আমি মনে রাখব!
গারউডান

4

আপনি যদি এটি সংরক্ষণাগারটি না রাখতে চান তবে সম্ভবত আপনি এরকম কিছু করতে পারেন

diff <(find folder1) <(find folder2)

findআরও সঠিক হতে আপনাকে কমান্ডগুলি মানিয়ে নিতে হতে পারে।

সম্পাদনা করুন আপনি -execফাইলের বিষয়বস্তুর তুলনা করার জন্য আপনার অনুসন্ধান কলটিতে যুক্ত করতে পারেন । এর মতো কিছু:

diff <(find folder1 -type f -exec md5sum {} \; | sort) <(find folder2 -type f -exec md5sum {} \; | sort)

মনে রাখবেন আপনি এটি মানিয়ে নিতে পারেন।


এটি একটি আকর্ষণীয় বিষয়। এটি প্রতিটি ফোল্ডারের সমস্ত ফাইল তালিকাভুক্ত করে ... তবে আমার কাছে যদি সত্যিই প্রচুর পরিমাণে সংরক্ষণাগার থাকে ... প্রতিটি ফোল্ডারে একই ফাইলগুলি (ডেটা সহ - সম্ভবত একটি এমডি 5সাম সরঞ্জাম ব্যবহার করে) আছে তা কীভাবে যাচাই করা যায়?
গারুডান

1
তারপরে প্রতিটি ফাইলের MD5SUM আউটপুট থেকে আলাদা করুন do আপনাকে কেবল অনুসন্ধান, এমডি 5সাম এবং ডিফ কমান্ডকে আলাদাভাবে স্ট্রিং করতে হবে।
সিব্রায়ন

আপনার ধারণাগুলি সম্পর্কেও ধন্যবাদ, সিএএ ... আমি এইগুলি সন্ধানের পরে আকর্ষণীয় জিনিসগুলি চেষ্টা করব ... ধন্যবাদ
গারউডান

3

পরীক্ষার একটি উপায় হ'ল ফোল্ডার এবং এর সাবফোল্ডারগুলির সমস্ত ফাইলের সংমিশ্রণের উপর ভিত্তি করে একটি এমডি 5সাম তৈরি করা যায়। মনে রাখবেন যে এগুলিরও ফাইলগুলির একই নাম থাকা প্রয়োজন (যেমন তারা অবশ্যই একই ধরণের ক্রমে হওয়া উচিত)। নিম্নলিখিত কোডে কাজ করা উচিত:

#!/bin/bash

shopt -s nullglob
shopt -s globstar || { printf '%s\n' 'Bash 4 is required for globstar.' ; exit 1 ; }
(( $# == 2 )) || { printf '%s\n' "Usage: ${0##*/} olddir newdir" ; exit 2 ; }

for _file in "$1"/**/*; do [[ -f ${_file} && ! -L ${_file} ]] && _files_in_old_dir+=( "${_file}" ); done
for _file in "$2"/**/*; do [[ -f ${_file} && ! -L ${_file} ]] && _files_in_new_dir+=( "${_file}" ); done

(( ${#_files_in_old_dir[@]} )) || { printf '%s\n' 'No files in old dir.' ; exit 3 ; }
(( ${#_files_in_new_dir[@]} )) || { printf '%s\n' 'No files in new dir.' ; exit 4 ; }

_md5_old_dir=$(cat "${_files_in_old_dir[@]}" | md5sum)
_md5_new_dir=$(cat "${_files_in_new_dir[@]}" | md5sum)

{ [[ ${_md5_old_dir} == "${_md5_new_dir}" ]] && (( ${#_files_in_old_dir[@]} == ${#_files_in_new_dir[@]} )) ; } && printf '%s\n' 'Folders are identical.' || { printf '%s\n' 'Folders are not identical.' ; exit 3 ; }

আপনি যদি ফাইলের নাম ইত্যাদির বিষয়ে সত্যই যত্নশীল হন তবে আপনি কী ${_files_in_old_dir}এবং কী আছে তার সাথে তুলনা করতে একটি লুপ ব্যবহার করতে পারেন ${_files_in_new_dir}। এটি বেশিরভাগ ক্ষেত্রেই কাজ করা উচিত (এটি কমপক্ষে দির এবং এর উপ-ডিরেক্টরিগুলিতে ফাইলের সংখ্যা পরীক্ষা করে)।


এটি একটি দুর্দান্ত স্ক্রিপ্ট ... thx @ ক্রিস। তবে এতে সমস্যা আছে ... বিড়াল ব্যবহার করে , সাবফোল্ডারগুলি ত্রুটির সাথে ক্র্যাশ হয়ে গেছে ... এটি সমাধান করার আপনার কি ধারণা আছে? অনেক ধন্যবাদ.
গারউডান

এটা আমার জন্য ভালই কাজ করে। আপনার শেল সমর্থন করে তা নিশ্চিত করুন globstar। ত্রুটি কী?
ক্রিস ডাউন

1
এটি "কাজ করে" (+1) ... তবে ব্যাশ 4-এ গ্লোবস্টারটি ডিরেক্টরি সিমলিংকগুলি অনুসরণ করে , তবে কেবলমাত্র যদি সমস্যাটি হয় যদি ডিরেক্টরিতে একটি সিমিলিংক থাকে।
পিটার.ও

@ ভালো কল, আমি একটি পরীক্ষায় যোগ করেছি।
ক্রিস ডাউন

0

আমি লক্ষ্য করেছি যে মূল পোস্টটি বরং পুরানো, তবে আমি মনে করি যে ফাইলগুলি সঠিকভাবে অনুলিপি করা হয়েছে তা যাচাই করার জন্য সমাধান খুঁজছেন তাদের কাছে এই তথ্যটি এখনও মূল্যবান হতে পারে। এই থ্রেডে দেওয়া ডেটা এবং উত্তরগুলি অনুলিপি করার জন্য রাইকিঙ্কটি সেরা পদ্ধতি হতে পারে, তবে লিনাক্সের সাথে যারা অভিজ্ঞ নয় তাদের ক্ষেত্রে, আমি আরও বিস্তারিত ব্যাখ্যা দেওয়ার চেষ্টা করব।

পরিস্থিতি: আপনি কেবলমাত্র প্রচুর সাব-ডিরেক্টরি এবং ফাইল দিয়ে একটি ডিস্ক থেকে অন্যটিতে অনুলিপি করেছেন। আপনি যাচাই করতে চান যে সমস্ত ডেটা সঠিকভাবে অনুলিপি করা হয়েছে।

প্রথমে কমান্ড জারি করে md5DP ইনস্টল করা আছে তা পরীক্ষা করুন md5deep -v

'কমান্ড পাওয়া যায় নি' এর মতো কিছু বলে যদি আপনি একটি বার্তা পান তবে md5DP দ্বারা ইনস্টল করুন apt-get install md5deep

ধারণা করা হয় আপনি কেবল নিয়মিত ফাইলগুলিই ডিল করতে চান। আপনি যদি অন্য ধরণের ফাইলগুলির সাথে ডিল করতে চান তবে এমডি 5 ডিডিপ ম্যানুয়ালটিতে -o পতাকাটি দেখুন। ( man md5deep)

এখন আপনি যেতে ভাল হয়, এবং আমরা ধরে নিই যে আপনি ফাইল কপি থেকে /mnt/orginalথেকে /mnt/backup, কোনো ডিরেক্টরি আপনি ব্যবহার করছেন জন্য এই প্রতিস্থাপন।

উত্স ডিরেক্টরিতে প্রথম পরিবর্তন করুন, আপনি অনুলিপি করেছেন বা ব্যাক আপ করা ফাইলগুলির জন্য এটিই আসল উত্স:

cd /mnt/orginal

তারপরে প্রতিটি ফাইলের একটি চেকসাম তৈরি করুন:

md5deep -rel -o f . >> /tmp/checksums.md5

এই আদেশটি ব্যাখ্যা করেছে:

-r পুনরাবৃত্ত মোড সক্ষম করে

-e অগ্রগতি সূচক প্রদর্শন করে

-l আপেক্ষিক ফাইল পাথ সক্ষম করে।

-o f কেবল নিয়মিত ফাইলগুলিতে কাজ করুন (ডিভাইসগুলি ব্লক নয়, নামযুক্ত পাইপ ইত্যাদি)

. বর্তমান ডিরেক্টরিতে এমডি 5 ডিপি শুরু করতে বলে।

>> /tmp/checksums.md5সমস্ত আউটপুট এ পুনর্নির্দেশ করতে এমডি 5 ডিপিকে বলে /tmp/checksums.md5

মনে রাখবেন, আপনি পূর্ববর্তী সংস্করণে উপস্থিত বিষয়বস্তু ওভাররাইট করতে চান তাহলে /tmp/checksums.md5, ব্যবহার >এবং>>

নোট করুন যে আইও-স্পিড এবং ডেটার আকারের উপর নির্ভর করে এই কমান্ডটি বেশ কিছুটা সময় নিতে পারে। আপনি এমডি 5 ডিভিডের পারফরম্যান্স বাড়ানোর জন্য সুন্দর এবং / অথবা আয়নিসের সাথে পরীক্ষা করতে পারেন, তবে এটি এই উত্তরের বাইরে নয়।

চেক স্যামগুলি তৈরির কাজ শেষ হয়ে গেলে, আপনার কাছে এখন এমন একটি ফাইল রয়েছে যাতে এর মতো এন্ট্রি রয়েছে:

69c0a826b29c8f40b7ca5e56e53d7f83.83.ডোনকফিগ 11-09-2013/etc2/apm/event.d/20hdparm 651f3c7f79a14332f9FA9bb368039210./oldconfig-11-03-2019 / এফসিআর.এস.এফ.এইচ.আর.এফ.এইচ.এফ.এইচ.এফ.এইচ.এফ.এইচ.এফ.এইচ.আর.এফ.এইচ.এফ.এইচ.আর.এফ.এইচ.এফ.এইচ.আর.এফ.এইচ.আর.এফ.এইচ.আর.এফ.এইচ.আর.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.এফ.আর /etc2/apm/scriptts.d/alsa e9b9131660a8013983bc5e19d7d669eb ./oldconfig-11-0-09-2013/etc2/ld.so.cache

প্রথম কলামটি হ'ল এমডি 5 চেক সমষ্টি এবং দ্বিতীয় কলামটি চেকসাম সম্পর্কিত ফাইলের আপেক্ষিক পথ।

আপনি যদি চেকসাম ফাইলটিতে কতগুলি ফাইল বিদ্যমান তা দেখতে চান তবে কমান্ডটি জারি করুন:

wc /tmp/checksums.md5 -l

এখন, আপনি অনুলিপি করা তথ্যটি সঠিক কিনা তা পরীক্ষা করতে চান:

cd /mnt/backup

md5deep -o f -reX /tmp/checksums.md5 . >> /tmp/compare.result

আমরা চেকসামগুলি তৈরি করার সময় থেকে কেবলমাত্র পার্থক্য হ'ল - এক্স যা চেকসামস.এমডি 5 ফাইলটিতে প্রবেশ মেলা না হলে কোনও ফাইলের বর্তমান হ্যাশ প্রদর্শন করে disp সুতরাং পরীক্ষার শেষে, যদি /tmp/compare.resultফাঁকা হয়, আপনি বিশ্বাস করতে পারেন যে চেকসামগুলি মিলে যাওয়ার পরে সমস্ত ফাইল সঠিকভাবে অনুলিপি করা হয়েছে।

দ্রষ্টব্য যে কেবলমাত্র /tmp/checksums.md5ফাইলটিতে তালিকাবদ্ধ ফাইলগুলি সঠিক চেকসামের জন্য পরীক্ষা করা হবে, /mnt/backupডিরেক্টরিতে কোনও অতিরিক্ত ফাইল থাকলে , এমডি 5 প্রদীপ আপনাকে এগুলি সম্পর্কে অবহিত করবে না।

মন্তব্য:

  • আউটপুট ফাইলগুলি সংরক্ষণ করার জন্য আপনাকে অগত্যা পুনর্নির্দেশ ব্যবহার করতে হবে না। আরও তথ্যের জন্য md5DP ম্যানুয়াল পড়ুন।

  • আপনি যে ফাইলগুলি পরিচালনা করছেন তার অনুমতিের উপর ভিত্তি করে আপনাকে মূল হিসাবে এমডি 5 ডিভিডি চালাতে হবে।


0

আপনি যদি দুটি ডিরেক্টরিতে এবং ব্যবহার না করে পুনরাবৃত্তভাবে পার্থক্যগুলি পরীক্ষা করতে চান :/path1/path2 md5deep

diff <(cd /path1 && find . -type f |xargs md5) <(cd /path2 && find . -type f |xargs md5)

ব্যাখ্যা:

  • ( ) এর সাথে সম্পর্কিত হয়ে path1সমস্ত লাইন মুদ্রিত করতে প্রবেশ করলfindpath1cd /path1
  • সব তালিকাবদ্ধ করে ফাইল বর্তমান পাথ যাও recursively ( && find . -type f)
  • প্রতিটি লাইন আউটপুট ( ) এর findইনপুট হিসাবে ব্যবহার করুনmd5| xargs md5

যদি কোনও পার্থক্য থাকে তবে আউটপুটটি এ জাতীয় দেখাচ্ছে:

< MD5 (./index.html) = 36b01762f0329b2c12a5186520c7d78a
< MD5 (./inline.js) = ce99823a4b2c24839a727c5781f59a36
< MD5 (./main.js) = 3a597404d3ba7f0a6e3cb093ef57ebb2
---
> MD5 (./index.html) = 3a3d7663a7b2871ff37b9081a53593f9
> MD5 (./inline.js) = 1bbd0ecfc75b578413105c6b9009f9b3
> MD5 (./main.js) = 0f44abe5084add3cabdc39feec0c699878c78
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.