නාමාවලියක අන්තර්ගතයේ MD5 එකතුව එක් මුදලක් ලෙස ලබා ගන්නේ කෙසේද?


183

Md5sum වැඩසටහන මඟින් නාමාවලි සඳහා චෙක්සම් ලබා නොදේ. උප නාමාවලිවල ගොනු ඇතුළුව ඩිරෙක්ටරියේ සමස්ත අන්තර්ගතයන් සඳහා තනි MD5 චෙක්සමයක් ලබා ගැනීමට මට අවශ්‍යය. එනම්, සියලුම ලිපිගොනු වලින් සාදන ලද එක් ඒකාබද්ධ චෙක්සමයක්. මෙය කිරීමට ක්‍රමයක් තිබේද?

Answers:


216

නිවැරදි මාර්ගය රඳා පවතින්නේ ඔබ අසන්නේ ඇයිද යන්න මතය:

විකල්ප 1: දත්ත පමණක් සංසන්දනය කරන්න

ඔබට ගසෙහි ගොනු අන්තර්ගතයේ හෑෂ් එකක් අවශ්‍ය නම්, මෙය උපක්‍රමය කරයි:

$ find -s somedir -type f -exec md5sum {} \; | md5sum

මෙය මුලින් ගොනු ලිපිගොනු සියල්ලම පුරෝකථනය කළ හැකි අනුපිළිවෙලින් සාරාංශ කරයි, පසුව එම ගොනු නම් සහ එම්ඩී 5 හැෂ් හැෂ් කළ යුතු ලැයිස්තුවක් පසුකර යන අතර ගසෙහි එක් ලිපිගොනුවක අන්තර්ගතය වෙනස් වූ විට පමණක් වෙනස් වන තනි අගයක් ලබා දෙයි.

අවාසනාවට, find -sමැකෝස්, ෆ්‍රීබීඑස්ඩී, නෙට්බීඑස්ඩී සහ ඕපන්බීඑස්ඩී හි භාවිතා කරන බීඑස්ඩී සොයාගැනීම (1) සමඟ පමණක් ක්‍රියා කරයි. GNU හෝ SUS සොයා ගැනීම (1) සහිත පද්ධතියක සැසඳිය හැකි යමක් ලබා ගැනීමට, ඔබට ටිකක් අවලස්සන යමක් අවශ්‍ය වේ:

$ find somedir -type f -exec md5sum {} \; | sort -k 2 | md5sum

find -sඇමතුමක් එක් කිරීමෙන් අපි BSD හි හැසිරීම අනුකරණය කර ඇත්තෙමු sort. මෙම -k 2පමණක් මඟින් රේඛාව අවසන් හරහා ක්ෂේත්රයේ 2 වන ගොනු නම්, තරාතිරමකම එසේ ටිකක් එය, තුළ MD5 හැෂ් කට මඟ කියනවා sortගේ ගණනය.

මෙම විධානයෙහි දුර්වලතාවයක් ඇත, එනම් ඔබට නව රේඛා සහිත ලිපිගොනු තිබේ නම් එය ව්‍යාකූල වීමට ඉඩ ඇත, මන්ද එය sortඇමතුමට පේළි කිහිපයක් මෙන් පෙනෙනු ඇත. මෙම find -sනිසා ගස ඉක්මවා යාමක් ප්රභේද්යයක්, එම ගැටලුව නොමැති අතර, එම වැඩසටහන සඳහා තුළ සිදු සැකසීම, find.

කෙසේ වෙතත්, ව්‍යාජ ධනාත්මක තත්ත්වයන් වළක්වා ගැනීම සඳහා වර්ග කිරීම අවශ්‍ය වේ: වඩාත් සුලභ යුනික්ස් / ලිනක්ස් ගොනු පද්ධති නාමාවලි ලැයිස්තු ස්ථාවර, පුරෝකථනය කළ හැකි පිළිවෙලකට පවත්වා නොගනී. ඔබ lsසඳහා නාමාවලි අන්තර්ගතයන් නිහ ly ව වර්ග කරන සහ භාවිතා කිරීමෙන් මෙය ඔබට වැටහෙන්නේ නැත . ඇමතුම් findයම් ආකාරයකින් එහි ප්රතිදානය තෝරා බේරා ගැනීමේ තොරව මාර්ග අනුපිළිවෙල ප්රතිදානයේ ඕනෑම දෙයක් සඳහා පාදක වු ගොනු පද්ධතිය ප්රතිලාභ ඔවුන් ගැලපෙන, ගොනු අනුපිළිවෙල ආදාන වෙනස්කම් ලෙස එය ලබා නම්, මෙම විධානය වෙනස්වූ පූරක අගය දෙන්න ඇති වනු ඇත, හේතු වනු ඇත දත්ත එක හා සමාන වුවත්.

ඉහත -k 2GNU sortවිධානයෙහි ඇති බිට් අවශ්‍ය දැයි ඔබට විමසිය හැකිය . ගොනුවේ දත්තවල හැෂ් අන්තර්ගතය වෙනස් වී නොමැති තාක් කල් ගොනුවේ නමට ප්‍රමාණවත් ප්‍රොක්සියක් වන බැවින්, අපි මෙම විකල්පය අතහැර දැමුවහොත් අපට ව්‍යාජ ධනාත්මක ප්‍රති get ල නොලැබෙනු ඇත sort. කෙසේ වෙතත්, කුඩා අවස්ථාවක් ( MD5 සමඟ 1: 2 128 ) ඇති බව වටහා ගන්න, ගොනු නාමයන් හරියටම ඇණවුම් කිරීම අර්ධ වශයෙන් අනුපිළිවෙලට නොගැලපෙන අතර එය නොමැතිව -k 2හැෂ් ision ට්ටනයක් තිබේ නම් ලබා දිය හැකිය. කෙසේ වෙතත්, මතක තබා ගන්න, කෙසේ වෙතත්, ඔබේ යෙදුමට නොගැලපීමේ වැදගත් කාරණයක් තිබේ නම්, මෙම සමස්ත ප්‍රවේශයම ඔබට ප්‍රශ්නයක් නොවේ.

ඔබට md5sumවිධාන වෙනස් කිරීමට md5හෝ වෙනත් හැෂ් ශ්‍රිතයකට අවශ්‍ය විය හැකිය. ඔබ වෙනත් හැෂ් ශ්‍රිතයක් තෝරාගෙන ඔබේ පද්ධතිය සඳහා දෙවන විධානය අවශ්‍ය නම්, ඔබට ඒ sortඅනුව විධානය සකස් කිරීමට අවශ්‍ය වනු ඇත . තවත් උගුලක් නම්, සමහර දත්ත සාරාංශ වැඩසටහන් කිසිසේත් ගොනු නාමයක් ලිවීම නොවේ, ප්‍රධාන උදාහරණය පැරණි යුනික්ස් sumවැඩසටහනයි.

මෙම ක්‍රමය තරමක් අකාර්යක්ෂම වන අතර, md5sumN + 1 වතාවක් ඇමතීම , එහිදී N යනු ගසෙහි ඇති ගොනු ගණන වේ, නමුත් එය හැෂිං ගොනුව සහ නාමාවලි පාර-දත්ත මඟ හැරීම සඳහා අත්‍යවශ්‍ය පිරිවැයක් වේ.

විකල්ප 2: දත්ත සහ පාර- දත්ත සංසන්දනය කරන්න

ගසක ඇති ඕනෑම දෙයක් වෙනස් වී ඇති බව ඔබට හඳුනා ගැනීමට අවශ්‍ය නම් , ගොනු අන්තර්ගතය පමණක් නොව, tarනාමාවලි අන්තර්ගතය ඔබ වෙනුවෙන් ඇසුරුම් කිරීමට අසන්න, ඉන්පසු එය වෙත එවන්න md5sum:

$ tar -cf - somedir | md5sum

tarගොනු අවසරයන්, හිමිකාරිත්වය යනාදිය ද දකින හෙයින් , මෙය ගොනු අන්තර්ගතයන්හි වෙනස්කම් පමණක් නොව, එම දේවල වෙනස්කම් ද හඳුනා ගනී.

මෙම ක්‍රමය සැලකිය යුතු වේගයකින් යුක්ත වන අතර, එය ගස හරහා එක් පාස් එකක් පමණක් කර හැෂ් වැඩසටහන ක්‍රියාත්මක කරන්නේ එක් වරක් පමණි.

සමග මෙන් ම findඉහත මත පදනම් වූ ක්රමයක්, tarයටින් පවතින ගොනු පද්ධතිය ප්රතිලාභ ඔවුන්ට සඳහා ගොනු නම් කටයුතු කිරීමට යන්නේ. ඔබගේ යෙදුමේදී, මෙය සිදු නොවන බවට ඔබට සහතික විය හැකිය. අවම වශයෙන් වෙනස් භාවිත රටා තුනක් ගැන මට සිතිය හැකිය. (මම ඒවා ලැයිස්තුගත නොකරමි, මන්ද අප නිශ්චිත නොවන හැසිරීම් ප්‍රදේශයකට පිවිසෙමින් සිටිමු. සෑම ගොනු පද්ධතියක්ම මෙහෙයුම් පද්ධතියේ එක් අනුවාදයක සිට තවත් අනුවාදයක් දක්වා වෙනස් විය හැකිය.)

ඔබ ව්‍යාජ ධනාත්මක බවක් ලබා ගන්නේ නම්, ගිලෙස්ගේ පිළිතුරේ ඇති find | cpioවිකල්පය සමඟ යාමට මම නිර්දේශ කරමි .


8
සංසන්දනය කරන ලද නාමාවලිය වෙත සැරිසැරීම සහ find .ඒ වෙනුවට භාවිතා කිරීම වඩාත් සුදුසු යැයි මම සිතමි find somedir. සොයා ගැනීමට විවිධ මාර්ග-පිරිවිතර සපයන විට ගොනු නාම සමාන වේ; මෙය ව්‍යාකූල විය හැකිය :-)
අබ්බාෆි

අපි ලිපිගොනු වර්ග කළ යුතුද?
CMCDragonkai

@CMCDragonkai: ඔබ අදහස් කළේ කුමක්ද? පළමු අවස්ථාවේදී, අපි කරන්න ගොනු නම් ලැයිස්තුව නිරාකරණය. දෙවන අවස්ථාවෙහිදී, අපි හිතාමතාම එසේ නොකරන්නේ පළමු වාක්‍යයේ අවධාරණය කර ඇති කිසිවක් කොටසක් ඩිරෙක්ටරියේ ලිපිගොනු අනුපිළිවෙල වෙනස් වී ඇති නිසා ඔබට කිසිවක් වර්ග කිරීමට අවශ්‍ය නොවනු ඇත.
වොරන් යං

ArWarrenYoung විකල්ප 2 සැමවිටම වඩා හොඳ නොවන්නේ මන්දැයි ඔබට තව ටිකක් විස්තර කළ හැකිද? එය ඉක්මන්, සරල හා වඩා හරස් වේදිකාවක් බව පෙනේ. එය 1 වන විකල්පය නොවිය යුත්තේ කුමන අවස්ථාවේදීද?
රොබින් වින්ස්ලෝ

විකල්ප 1 විකල්පය: find somedir -type f -exec sh -c "openssl dgst -sha1 -binary {} | xxd -p" \; | sort | openssl dgst -sha1සියලුම ගොනු නාම නොසලකා හැරීම (නව
රේඛා

41

චෙක්සම් යනු ලිපිගොනු නූලක් ලෙස නිශ්චිත හා සැක සහිත නිරූපණයකි. නිර්ණායක යනු ඔබ එකම ලිපිගොනු එකම ස්ථානයක තැබුවහොත් ඔබට එකම ප්‍රති .ලය ලැබෙනු ඇති බවයි. සැක සහිත අර්ථය නම් විවිධ ගොනු කට්ටල දෙකකට විවිධ නිරූපණයන් ඇති බවයි.

දත්ත සහ පාර-දත්ත

ලිපිගොනු අඩංගු ලේඛනාගාරයක් සෑදීම හොඳ ආරම්භයකි. මෙය නිසැක නිරූපණයකි (පැහැදිලිවම, ලේඛනාගාරය උපුටා ගැනීමෙන් ඔබට ගොනු නැවත ලබා ගත හැකි බැවින්). දිනයන් සහ හිමිකාරිත්වය වැනි ගොනු පාර-දත්ත එයට ඇතුළත් විය හැකිය. කෙසේ වෙතත්, මෙය තවම නිවැරදි නැත: සංරක්ෂිතයක් අපැහැදිලි ය, මන්ද එහි නිරූපණය ගොනු ගබඩා කර ඇති අනුපිළිවෙල මත රඳා පවතින අතර සම්පීඩනයට අදාළ නම්.

විසඳුමක් වන්නේ ගොනු නාම සංරක්ෂණය කිරීමට පෙර ඒවා වර්ග කිරීමයි. ඔබගේ ලිපිගොනු නාමවල නව රේඛා අඩංගු නොවේ නම්, ඔබට ඒවා find | sortලැයිස්තු ගත කිරීමට දුව ගොස් මෙම අනුපිළිවෙලෙහි සංරක්ෂිතයට එක් කරන්න. නාමාවලි වලට නැවත නොයන ලෙස ලේඛනාගාරයට පැවසීමට සැලකිලිමත් වන්න. POSIX pax, GNU tar සහ cpio සමඟ උදාහරණ මෙන්න :

find | LC_ALL=C sort | pax -w -d | md5sum
find | LC_ALL=C sort | tar -cf - -T - --no-recursion | md5sum
find | LC_ALL=C sort | cpio -o | md5sum

නම් සහ අන්තර්ගතය පමණි, අඩු තාක්‍ෂණික ක්‍රමය

ඔබට අවශ්‍ය වන්නේ ගොනු දත්ත සැලකිල්ලට ගැනීම මිස පාර-දත්ත නොවේ නම්, ඔබට සංරක්ෂිතයක් සෑදිය හැක්කේ ගොනු අන්තර්ගතයන් පමණක් වන නමුත් ඒ සඳහා සම්මත මෙවලම් නොමැත. ගොනු අන්තර්ගතයන් ඇතුළත් කරනවා වෙනුවට, ඔබට ගොනු වල හැෂ් ඇතුළත් කළ හැකිය. ලිපිගොනු නාමවල නව රේඛා නොමැති නම් සහ සාමාන්‍ය ලිපිගොනු සහ නාමාවලි පමණක් තිබේ නම් (සංකේතාත්මක සබැඳි හෝ විශේෂ ලිපිගොනු නොමැත), මෙය තරමක් පහසුය, නමුත් ඔබ කරුණු කිහිපයක් ගැන සැලකිලිමත් විය යුතුය:

{ export LC_ALL=C;
  find -type f -exec wc -c {} \; | sort; echo;
  find -type f -exec md5sum {} + | sort; echo;
  find . -type d | sort; find . -type d | sort | md5sum;
} | md5sum

චෙක්සම් ලැයිස්තුවට අමතරව අපි ඩිරෙක්ටරි ලැයිස්තුවක් ඇතුළත් කරන්නෙමු, එසේ නොමැතිනම් හිස් නාමාවලි අදෘශ්‍යමාන වේ. ලිපිගොනු ලැයිස්තුව වර්ග කර ඇත (නිශ්චිත, ප්‍රජනනය කළ හැකි ස්ථානයක - මට මතක් කිරීම ගැන පීටර්.ඕට ස්තූතියි). echoකොටස් දෙක වෙන් කරයි (මෙය නොමැතිව ඔබට md5sumසාමාන්‍ය ලිපිගොනු සඳහා සම්මත කළ හැකි නිමැවුම් ලෙස පෙනෙන හිස් නාමාවලි කිහිපයක් සෑදිය හැකිය ). දිග දිගු කිරීමේ ප්‍රහාර වළක්වා ගැනීම සඳහා අපි ගොනු ප්‍රමාණ ලැයිස්තුවක් ද ඇතුළත් කරමු .

මාර්ගය වන විට, MD5 ඉවත් කරනු ලැබේ. එය තිබේ නම්, SHA-2 හෝ අවම වශයෙන් SHA-1 භාවිතා කිරීම ගැන සලකා බලන්න.

නම් සහ දත්ත, නම් වල නව රේඛාවලට සහය දක්වයි

ඉහත කේතයේ ප්‍රභේදයක් වන්නේ ගොනු නාමයන් ශුන්‍ය බයිට් සමඟ වෙන් කිරීම සඳහා ග්නූ මෙවලම් මත රඳා පවතී. මෙමඟින් ගොනු නාමවල නව රේඛා අඩංගු වේ. GNU ඩයිජෙස්ට් උපයෝගිතා ඒවායේ ප්‍රතිදානයේ විශේෂ අක්ෂර උපුටා දක්වයි, එබැවින් නොපැහැදිලි නව රේඛා නොමැත.

{ export LC_ALL=C;
  du -0ab | sort -z; # file lengths, including directories (with length 0)
  echo | tr '\n' '\000'; # separator
  find -type f -exec sha256sum {} + | sort -z; # file hashes
  echo | tr '\n' '\000'; # separator
  echo "End of hashed data."; # End of input marker
} | sha256sum

වඩාත් ශක්තිමත් ප්රවේශයක්

ලිපිගොනු වල ධූරාවලිය විස්තර කරන හැෂ් එකක් සාදන අවම වශයෙන් පරීක්ෂා කරන ලද පයිතන් පිටපතක් මෙන්න. එය නාමාවලි සහ ගොනු අන්තර්ගතයන් ගිණුම්වලට ගෙන යන අතර සංකේතාත්මක සබැඳි සහ වෙනත් ලිපිගොනු නොසලකා හරින අතර ඕනෑම ගොනුවක් කියවිය නොහැකි නම් මාරාන්තික දෝෂයක් ලබා දෙයි.

#! /usr/bin/env python
import hashlib, hmac, os, stat, sys
## Return the hash of the contents of the specified file, as a hex string
def file_hash(name):
    f = open(name)
    h = hashlib.sha256()
    while True:
        buf = f.read(16384)
        if len(buf) == 0: break
        h.update(buf)
    f.close()
    return h.hexdigest()
## Traverse the specified path and update the hash with a description of its
## name and contents
def traverse(h, path):
    rs = os.lstat(path)
    quoted_name = repr(path)
    if stat.S_ISDIR(rs.st_mode):
        h.update('dir ' + quoted_name + '\n')
        for entry in sorted(os.listdir(path)):
            traverse(h, os.path.join(path, entry))
    elif stat.S_ISREG(rs.st_mode):
        h.update('reg ' + quoted_name + ' ')
        h.update(str(rs.st_size) + ' ')
        h.update(file_hash(path) + '\n')
    else: pass # silently symlinks and other special files
h = hashlib.sha256()
for root in sys.argv[1:]: traverse(h, root)
h.update('end\n')
print h.hexdigest()

හරි, මේක වැඩ කරනවා, ස්තූතියි. නමුත් කිසිදු පාර-දත්ත ඇතුළත් නොකර එය කිරීමට ක්‍රමයක් තිබේද? දැන් මට එය අවශ්‍ය වන්නේ සත්‍ය අන්තර්ගතයන් සඳහා පමණි.

LC_ALL=C sortවිවිධ පරිසරයන්ගෙන් පරීක්ෂා කිරීම සඳහා කෙසේද ... (+ 1
btw

ඔබ මේ සඳහා සම්පූර්ණ පයිතන් වැඩසටහනක් කළාද? ස්තූතියි! මෙය සැබවින්ම මා බලාපොරොත්තු වූවාට වඩා වැඩිය. :-) කෙසේ වෙතත්, මම මෙම ක්‍රම මෙන්ම වොරන් විසින් නව විකල්ප 1 ද පරීක්ෂා කරමි.

හොඳ පිළිතුරක්. LC_ALL=Cබහු යන්ත්‍ර සහ මෙහෙයුම් පද්ධති මත ධාවනය වන්නේ නම් වර්ග කිරීමේ අනුපිළිවෙල සැකසීම අත්‍යවශ්‍ය වේ.
ඩාවෝර් කුබ්රානික්

එයින් cpio -o -අදහස් කරන්නේ කුමක්ද? Cpio පෙරනිමියෙන් stdin / out භාවිතා කරන්නේ නැද්ද? GNU cpio 2.12 නිෂ්පාදනය කරයිcpio: Too many arguments
Jan Tojnar

14

Md5deep දෙස බලන්න . ඔබට උනන්දුවක් දැක්විය හැකි md5deep හි සමහර විශේෂාංග:

පුනරාවර්තන ක්‍රියාකාරිත්වය - md5deep හට සම්පූර්ණ ඩිරෙක්ටරි ගසක්ම පුනරාවර්තනය කිරීමට හැකියාව ඇත. එනම්, නාමාවලියක ඇති සෑම ගොනුවක් සඳහාම සහ සෑම උප බහලුමකම ඇති සෑම ගොනුවක් සඳහාම MD5 ගණනය කරන්න.

සංසන්දනාත්මක මාදිලිය - md5deep හට දන්නා හැෂ් ලැයිස්තුවක් පිළිගෙන ඒවා ආදාන ගොනු සමූහයකට සංසන්දනය කළ හැකිය. දන්නා හැෂ් ලැයිස්තුවට ගැලපෙන ආදාන ගොනු හෝ නොගැලපෙන ගොනු වැඩසටහනට පෙන්විය හැකිය.

...


හොඳයි, නමුත් එය වැඩ කිරීමට නොහැකි, එය පවසන්නේ .../foo: Is a directory, ලබා දෙන්නේ කුමක්ද?
කැමිලෝ මාටින්

3
ඒකාබද්ධ md5sum මුද්‍රණය නොකිරීම නිසා එහි md5deep විසින් OP හි ගැටළුව විසඳන්නේ නැත, එය නාමාවලියෙහි සෑම ගොනුවක් සඳහාම md5sum මුද්‍රණය කරයි. නැහැ - ඔබ md5deep ප්රතිදානය md5sum හැකි, බවයි තරමක් එම විශ්රාම වැටුප් අවශ්ය, නමුත් සමීප දේ! උදා: වත්මන් ඩිරෙක්ටරිය සඳහා: md5deep -r -l -j0 . | md5sum( -rපුනරාවර්තන තැනක , -l"සාපේක්ෂ මාර්ග භාවිතා කරන්න" යන්නෙන් ඩිරෙක්ටරි දෙකක අන්තර්ගතය සංසන්දනය කිරීමට උත්සාහ කරන විට ලිපිගොනු වල නිරපේක්ෂ මාර්ගය -j0බාධා නොවන පරිදි අර්ථ දක්වයි. තනි ඇණවුම් md5sums වෙත විවිධ ඇණවුම් වලින් ආපසු ලබා දෙනු ලැබේ).
ස්ටීවි

මාර්ගයේ සමහර ගොනු / නාමාවලි නොසලකා හරින්නේ කෙසේද?
සන්දීපන් නාත්

මම වඩාත්ම උත්තරීතර පිළිතුරට කැමතියි, නමුත් මෙය වඩාත් සරල ඉමෝ ය. ඔබට ස්තුතියි!
පිලිප් ඩුපානොවික්

11

ඔබේ ඉලක්කය නාමාවලි දෙකක් අතර වෙනස්කම් සොයා ගැනීම පමණක් නම්, වෙනස භාවිතා කිරීම සලකා බලන්න.

මේක උත්සාහ කරන්න:

diff -qr dir1 dir2

ඔව්, මෙයද ප්‍රයෝජනවත් වේ. මම හිතන්නේ ඔයා ඒ විධානයේ dir1 dir2 අදහස් කළා.

1
මම සාමාන්‍යයෙන් GUI භාවිතා නොකරන්නේ ඒවා මග හැරිය හැකි විටය, නමුත් ඩිරෙක්ටරියට වෙනස් kdiff3 විශිෂ්ට වන අතර බොහෝ වේදිකා වලද ක්‍රියා කරයි.
sinelaw

මෙම විධානය සමඟ වෙනස් ලිපිගොනු වාර්තා වේ.
සර්ජ් ස්ට්‍රෝබෑන්ඩ්

7

ඔබට සෑම ගොනුවක්ම පුනරාවර්තව හෑෂ් කළ හැකි අතර පසුව ලැබෙන පෙළ හෑෂ් කරන්න:

> md5deep -r -l . | sort | md5sum
d43417958e47758c6405b5098f151074 *-

md5deep අවශ්‍යයි.


1
md5deep පැකේජය හෂ්දීප් සඳහා සංක්‍රාන්ති ව්‍යාජයක් වන නිසා උබුන්ටු 16.04 md5deepභාවිතා කිරීම වෙනුවට hashdeep.
palik

1
මම හෂ්දීප් උත්සාහ කර ඇත්තෙමි. එය හැෂ් පමණක් නොව ## Invoked from: /home/myuser/dev/ඔබේ වර්තමාන මාර්ගය සහ සමහර ශීර්ෂයන් ද ප්‍රතිදානය ## $ hashdeep -s -r -l ~/folder/කරයි. මෙය වර්ග කිරීමට සිදු වේ, එබැවින් ඔබ ඔබගේ වර්තමාන ෆෝල්ඩරය හෝ විධාන රේඛාව වෙනස් කළහොත් අවසාන හැෂ් වෙනස් වේ.
truf

5

විසඳුම :

$ pip install checksumdir
$ checksumdir -a md5 assets/js
981ac0bc890de594a9f2f40e00f13872
$ checksumdir -a sha1 assets/js
88cd20f115e31a1e1ae381f7291d0c8cd3b92fad

වැඩ වේගවත් හා පහසු විසඳුමක් පසුව අත්ගුණය.

doc බලන්න: https://pypi.python.org/pypi/checksumdir/1.0.5


ඔබට පයිප්පයක් නොමැති නම් එය yum -y install python-pip (හෝ dnf / apt-get) සමඟ ස්ථාපනය කිරීමට අවශ්‍ය විය හැකිය
DmitrySemenov

4

මෙම විශිෂ්ට පිළිතුරේ පසු විපරමක් ලෙස, විශාල නාමාවලියක් සඳහා චෙක්සම් ගණනය කිරීම වේගවත් කිරීමට ඔබට අවශ්‍ය නම්, GNU සමාන්තරව උත්සාහ කරන්න :

find -s somedir -type f | parallel -k -n 100 md5 {} | md5

(මෙය මැක් සමඟ භාවිතා කරයි md5, අවශ්‍ය පරිදි ප්‍රතිස්ථාපනය කරන්න.)

මෙම -kධජය බවට උපදෙස් බව, වැදගත් parallelවෙනත් ආකාරයකින් සමස්ත මුදලක් ගොනු සියල්ල එම පවා, ක්රියාත්මක කිරීමට ලකුණු වෙනස් කළ හැකිය, සාමය ආරක්ෂා කිරීම සඳහා. තර්ක 100 ක් සමඟ -n 100එක් එක් අවස්ථාව ධාවනය කිරීමට පවසයි md5, මෙය ඔබට හොඳම ධාවන කාලය සඳහා වෙනස් කළ හැකි පරාමිතියකි. (මගේ පෞද්ගලික නඩුවේ දෝෂයක් ඇති වුවද) -Xධජය ද බලන්න parallel.


3

මම මෙය මගේ ස්නිපටය මධ්‍යස්ථ පරිමාවන් සඳහා භාවිතා කරමි :

find . -xdev -type f -print0 | LC_COLLATE=C sort -z | xargs -0 cat | md5sum -

මෙය XXXL සඳහා :

find . -xdev -type f -print0 | LC_COLLATE=C sort -z | xargs -0 tail -qc100 | md5sum -


මොකක්ද මේ කරන්නේ -xdevධජය ද?
czerasz

එය ඔබට ටයිප් කිරීමට අවශ්‍ය වේ: man findසහ එම කදිම අත්පොත කියවන්න;)
poige

හොඳ කරුණ :-). -xdev Don't descend directories on other filesystems.
czerasz

1
මෙය නව හිස් ගොනු නොසලකා හරින බව සලකන්න (ඔබ ගොනුවක් ස්පර්ශ කළහොත් වැනි).
රොන් ජෝන්

මෙය සම්පූර්ණයෙන්ම වෙනස් ගොනුවක් සහ නාමාවලි ව්‍යුහයක් සහිත එකම md5sum ලබා දෙන අවස්ථා බොහෝය. ලිපිගොනු සහ නාමාවලි නැවත නම් කිරීම, ගොනු වල වර්ග කිරීමේ අනුපිළිවෙල වෙනස් නොකරන්නේ නම් එය කිසිසේත් වෙනස් නොවේ. එබැවින් මම මෙම ප්රවේශය නිර්දේශ නොකරමි.
හාන්ස්-පීටර් ස්ටෝර්

3

ගොනු අන්තර්ගතයන් හැර ගොනු අන්තර්ගතයන් පමණි

විවිධ නාමාවලිවල අන්තර්ගතය පවතින බැවින් ගොනු නාම පමණක් පරීක්ෂා කරන අනුවාදයක් මට අවශ්‍ය විය.

මෙම අනුවාදය (වොරන් යන්ග්ගේ පිළිතුර) බොහෝ සෙයින් උපකාරී විය, නමුත් මගේ අනුවාදය md5sumගොනු නාමය ප්‍රතිදානය කරයි (මම විධානය ක්‍රියාත්මක කළ මාර්ගයට සාපේක්ෂව), සහ ෆෝල්ඩරයේ නම් වෙනස් විය, එබැවින් තනි ගොනු චෙක්සම් ගැලපුණද, අවසාන චෙක්සමය සිදු නොවීය. 'ටී.

එය නිවැරදි කිරීම සඳහා, මගේ නඩුවේදී, findප්‍රතිදානයේ සෑම පේළියකින්ම ගොනු නාමය ඉවත් කිරීමට මට අවශ්‍ය විය (භාවිතා කරමින් අවකාශයන් වෙන් කර ඇති පළමු වචනය පමණක් තෝරන්න cut):

find -s somedir -type f -exec md5sum {} \; | cut -d" " -f1 | md5sum

ප්‍රජනන ලැයිස්තුවක් ලබා ගැනීම සඳහා ඔබට චෙක්සම් වර්ග කිරීමට අවශ්‍ය විය හැකිය.
eckes

3

nix-hashසිට මෙම Nix ඇසුරුම් කළමනාකරු

නික්ස්-හෑෂ් විධානය මඟින් එක් එක් මාර්ගයේ අන්තර්ගතයේ ගුප්ත ලේඛන හැෂ් ගණනය කර සම්මත ප්‍රතිදානය මත මුද්‍රණය කරයි. පෙරනිමියෙන්, එය MD5 හෑෂ් ගණනය කරයි, නමුත් වෙනත් හැෂ් ඇල්ගොරිතමද ඇත. හැෂ් හෙක්සැඩිසිමල් වලින් මුද්‍රණය කර ඇත.

සෑම මාර්ගයකම අනුක්‍රමිකකරණය හරහා හැෂ් ගණනය කරනු ලැබේ: මාර්ග පද්ධතියේ මුල් බැස ඇති ගොනු පද්ධති ගසෙහි ඩම්ප් එකක්. මෙය නාමාවලි සහ සිම්ලින්ක් මෙන්ම සාමාන්‍ය ලිපිගොනු සේදීමට ඉඩ දෙයි. ඩම්ප් එක නික්ස්-ස්ටෝර් - ඩම්ප් විසින් නිපදවන NAR ආකෘතියෙන් ඇත. මේ අනුව, නික්ස්-හැෂ් මාර්ගය නික්ස්-ස්ටෝර් - ඩම්ප් පථයට සමාන ගුප්ත ලේඛන හැෂ් ලබා දෙයි md5sum.


2

හොඳ ගස් පිරික්සුම් එකතුවක් යනු Git හි ගස් හැඳුනුම්පතයි.

අවාසනාවකට එය කළ හැකි තනි මෙවලමක් නොමැත (අවම වශයෙන් මම එය නොදනිමි), නමුත් ඔබට Git පහසු නම් ඔබට නව ගබඩාවක් සැකසීමට මවා පාමින් ඔබට දර්ශකයට පරීක්ෂා කිරීමට අවශ්‍ය ලිපිගොනු එක් කළ හැකිය.

(ප්‍රජනනය කළ හැකි) ගස් හැෂ් නිෂ්පාදනය කිරීමට මෙය ඔබට ඉඩ සලසයි - එයට අන්තර්ගතය, ගොනු නම් සහ අඩු කරන ලද ගොනු මාතයන් (ක්‍රියාත්මක කළ හැකි) පමණක් ඇතුළත් වේ.


1

ස්ක්‍රිප්ට් එකක් හොඳින් පරීක්ෂා කර ඇති අතර අනුපිටපත් සොයා ගැනීම, දත්ත සහ පාර-දත්ත යන දෙකම සංසන්දනය කිරීම, එකතු කිරීම් මෙන්ම වෙනස්කම් සහ ඉවත් කිරීම් ඇතුළු මෙහෙයුම් ගණනාවකට සහාය දක්වයි, ඔබ ඇඟිලි සලකුණු වලට කැමති විය හැකිය .

ඇඟිලි සලකුණු දැන් ඩිරෙක්ටරියක් සඳහා එක චෙක්සමයක් නිපදවන්නේ නැත, නමුත් එම නාමාවලියෙහි ඇති සියලුම ලිපිගොනු සඳහා චෙක්සම් ඇතුළත් වන පිටපත් ගොනුවක්.

fingerprint analyze

මෙය index.fingerprintවත්මන් නාමාවලිය තුළ චෙක්සම්, ගොනු නාම සහ ගොනු ප්‍රමාණ ඇතුළත් වේ. පෙරනිමියෙන් එය MD5සහ දෙකම භාවිතා කරයි SHA1.256.

අනාගතයේ දී, මාකල් ගස් සඳහා ඇඟිලි සලකුණු වලට සහය එක් කිරීමට බලාපොරොත්තු වන අතර එමඟින් ඔබට ඉහළ මට්ටමේ චෙක්සමයක් ලබා දෙනු ඇත. දැන්, සත්‍යාපනය සඳහා ඔබ එම ගොනුව රඳවා තබා ගත යුතුය.


1

මට නව ක්‍රියාත්මක කළ හැකි හෝ අවුල් සහගත විසඳුම් අවශ්‍ය නොවීය.

#!/bin/sh
# md5dir.sh by Camilo Martin, 2014-10-01.
# Give this a parameter and it will calculate an md5 of the directory's contents.
# It only takes into account file contents and paths relative to the directory's root.
# This means that two dirs with different names and locations can hash equally.

if [[ ! -d "$1" ]]; then
    echo "Usage: md5dir.sh <dir_name>"
    exit
fi

d="$(tr '\\' / <<< "$1" | tr -s / | sed 's-/$--')"
c=$((${#d} + 35))
find "$d" -type f -exec md5sum {} \; | cut -c 1-33,$c- | sort | md5sum | cut -c 1-32

0

ශක්තිමත් හා පිරිසිදු ප්රවේශයක්

  • පළමුවෙන්ම පළමු දේ, පවතින මතකය රඳවා නොගන්න ! සම්පූර්ණ ගොනුව පෝෂණය කරනවාට වඩා ගොනුවක් කැබලිවලට දමන්න.
  • විවිධ අවශ්‍යතා / අරමුණු සඳහා විවිධ ප්‍රවේශයන් (පහත සියල්ලම හෝ මෙතෙක් අදාළ වන දේ තෝරා ගන්න):
    • නාමාවලි ගසෙහි ඇති සියලුම ඇතුළත් කිරීම්වල ඇතුළත් කිරීමේ නම පමණක් යොදන්න
    • සියලුම ඇතුළත් කිරීම් වල ගොනු අන්තර්ගතය අතුල්ලන්න (මෙටා වැනි, ඉනෝඩ් අංකය, ctime, atime, mtime, size, වැනි දේ අතහැර දමා ඔබට අදහස ලැබේ)
    • සංකේතාත්මක සබැඳියක් සඳහා, එහි අන්තර්ගතය යොමු නාමය වේ. එය සෝදන්න හෝ මඟ හැරීමට තෝරා ගන්න
    • ප්‍රවේශයේ අන්තර්ගතය හෑෂ් කරන අතරතුර සිම්ලින්ක් අනුගමනය කරන්න හෝ නොකිරීමට (විසඳන ලද නම)
    • එය නාමාවලියක් නම්, එහි අන්තර්ගතය නාමාවලි ඇතුළත් කිරීම් පමණි. පුනරාවර්තව ගමන් කරන විට ඒවා අවසානයේදී හෑෂ් කරනු ඇත, නමුත් මෙම නාමාවලිය ටැග් කිරීම සඳහා එම මට්ටමේ නාමාවලි ඇතුළත් කිරීමේ නම් හැෂ් කළ යුතුද? අන්තර්ගතය හෑෂ් කිරීම සඳහා ගැඹුරින් ගමන් නොකර වෙනසක් ඉක්මනින් හඳුනා ගැනීමට හැෂ් අවශ්‍ය වන අවස්ථාවන්හිදී ප්‍රයෝජනවත් වේ. උදාහරණයක් ලෙස ගොනුවේ නම වෙනස් විය හැකි නමුත් ඉතිරි අන්තර්ගතයන් එලෙසම පවතින අතර ඒවා සියල්ලම තරමක් විශාල ගොනු වේ
    • විශාල ලිපිගොනු හොඳින් හසුරුවන්න (නැවතත්, RAM මතක තබා ගන්න)
    • ඉතා ගැඹුරු ඩිරෙක්ටරි ගස් හසුරුවන්න (විවෘත ගොනු විස්තර කරන්නන් මතක තබා ගන්න)
    • සම්මත නොවන ගොනු නම් හසුරුවන්න
    • සොකට්, පයිප්ප / ෆිෆෝ, බ්ලොක් උපාංග, චාර් උපාංග වැනි ලිපිගොනු සමඟ ඉදිරියට යන්නේ කෙසේද? ඒවා ද හැෂ් කළ යුතුද?
    • ගමන් කරන අතරතුර කිසිදු ප්‍රවේශයක පිවිසුම් කාලය යාවත්කාලීන නොකරන්න, මන්ද මෙය අතුරු ආබාධයක් වන අතර ඇතැම් භාවිත අවස්ථා සඳහා ප්‍රති- tive ලදායී (බුද්ධිමත්?) වනු ඇත.

මගේ හිසට ඉහළින් ඇත්තේ මෙයයි, මේ සඳහා ප්‍රායෝගිකව යම් කාලයක් ගත කර ඇති ඕනෑම අයෙකුට වෙනත් ගොචා සහ කෝනර් නඩු අල්ලා ගැනීමට ඉඩ තිබුණි.

මෙන්න මෙවලමක් (වියාචනය: මම එයට දායක වෙමි) dtreetrawl , මතකය පිළිබඳ ඉතා සැහැල්ලු, බොහෝ අවස්ථාවන් ආමන්ත්‍රණය කරන, දාරවල් වටා තරමක් රළු විය හැකි නමුත් එය බෙහෙවින් උපකාරී වේ.

Usage:
  dtreetrawl [OPTION...] "/trawl/me" [path2,...]

Help Options:
  -h, --help                Show help options

Application Options:
  -t, --terse               Produce a terse output; parsable.
  -d, --delim=:             Character or string delimiter/separator for terse output(default ':')
  -l, --max-level=N         Do not traverse tree beyond N level(s)
  --hash                    Hash the files to produce checksums(default is MD5).
  -c, --checksum=md5        Valid hashing algorithms: md5, sha1, sha256, sha512.
  -s, --hash-symlink        Include symbolic links' referent name while calculating the root checksum
  -R, --only-root-hash      Output only the root hash. Blank line if --hash is not set
  -N, --no-name-hash        Exclude path name while calculating the root checksum
  -F, --no-content-hash     Do not hash the contents of the file

මානව හිතකාමී ප්‍රතිදානය උදාහරණයක්:

...
... //clipped
...
/home/lab/linux-4.14-rc8/CREDITS
        Base name                    : CREDITS
        Level                        : 1
        Type                         : regular file
        Referent name                :
        File size                    : 98443 bytes
        I-node number                : 290850
        No. directory entries        : 0
        Permission (octal)           : 0644
        Link count                   : 1
        Ownership                    : UID=0, GID=0
        Preferred I/O block size     : 4096 bytes
        Blocks allocated             : 200
        Last status change           : Tue, 21 Nov 17 21:28:18 +0530
        Last file access             : Thu, 28 Dec 17 00:53:27 +0530
        Last file modification       : Tue, 21 Nov 17 21:28:18 +0530
        Hash                         : 9f0312d130016d103aa5fc9d16a2437e

Stats for /home/lab/linux-4.14-rc8:
        Elapsed time     : 1.305767 s
        Start time       : Sun, 07 Jan 18 03:42:39 +0530
        Root hash        : 434e93111ad6f9335bb4954bc8f4eca4
        Hash type        : md5
        Depth            : 8
        Total,
                size           : 66850916 bytes
                entries        : 12484
                directories    : 763
                regular files  : 11715
                symlinks       : 6
                block devices  : 0
                char devices   : 0
                sockets        : 0
                FIFOs/pipes    : 0

සාමාන්‍ය උපදෙස් සැමවිටම සාදරයෙන් පිළිගන්නා නමුත් හොඳම පිළිතුරු නිශ්චිත වන අතර සුදුසු අවස්ථාවන්හි කේත ඇත. ඔබ යොමු කරන මෙවලම භාවිතා කිරීමේ අත්දැකීම් තිබේ නම් කරුණාකර එය ඇතුළත් කරන්න.
bu5hman

@ bu5hman ෂුවර්! මම එහි සංවර්ධනයට සම්බන්ධ වී ඇති බැවින් එය කෙතරම් හොඳින් ක්‍රියාත්මක වේද යන්න ගැන වැඩි යමක් කීමට මට පහසු නැත.
හය-කේ

0

එක් එක් නාමාවලියෙහි ඇති සියලුම ගොනු සඳහා වෙන වෙනම කිරීම.

# Calculating
find dir1 | xargs md5sum > dir1.md5
find dir2 | xargs md5sum > dir2.md5
# Comparing (and showing the difference)
paste <(sort -k2 dir1.md5) <(sort -k2 dir2.md5) | awk '$1 != $3'

0

ඔබට md5 අවශ්‍ය නොවේ නම්, ඔබට උත්සාහ කළ හැකිය

find . -type f | xargs cksum | cksum

1
ප්‍රශ්නය විශේෂයෙන් md5 ඉල්ලයි
RalfFriedl

0

POSIX සංරක්ෂිත ආකෘතියට සංක්‍රමණය වීම GNU Tar පදනම් කරගත් චෙක්සම් වලට බලපායි

මෙම පිළිතුර මීට ටික කලකට පෙර වොරන් යන්ග් සහ ගිලෙස්ගේ විශිෂ්ට පිළිතුරු වලින් යෝජනා කරන ලද පරිදි (වෙනත් දේ අතර) නාමාවලි වල අන්තර්ගතය හෑෂ් කිරීම සඳහා තාර ප්‍රතිදානය භාවිතා කිරීමේ ප්‍රවේශයට අතිරේක යාවත්කාලීන කිරීමකි .

එතැන් සිට, අවම වශයෙන් openSUSE (නිකුත් කළ 12.2 සිට) ඔවුන්ගේ පෙරනිමි GNU Tar ආකෘතිය "GNU tar 1.13.x ආකෘතියෙන්" (තරමක්) උසස් "POSIX 1003.1-2001 (pax) ආකෘතිය" ලෙස වෙනස් කළේය. ද (GNU තාර වන සංවර්ධකයින් අතර) උඩුගං ඔවුන් උදාහරණයක් ලෙස පසුගිය ඡේදය බලන්න, එම සංක්රමණය ඉටු කිරීමට සාකච්ඡා මෙම පිටුව පිළිබඳ GNU තාර අත්පොත :

GNU තාර සඳහා පෙරනිමි ආකෘතිය සම්පාදනය කරන වේලාවේදී අර්ථ දක්වා ඇත. ධාවනය tar --helpකිරීමෙන් සහ එහි ප්‍රතිදානයේ අවසාන පේළි පරීක්ෂා කිරීමෙන් ඔබට එය පරීක්ෂා කළ හැකිය . සාමාන්‍යයෙන්, ග්නූ තාර වින්‍යාසගත කර ඇත්තේ ලේඛනාගාරය gnuආකෘතියෙන් නිර්මාණය කිරීමට ය , කෙසේ වෙතත්, අනාගත අනුවාදය වෙත මාරු වේ posix.

(මෙම පිටුව ග්නූ තාර සමඟ ඇති විවිධ සංරක්ෂිත ආකෘතීන් පිළිබඳ කදිම සමාලෝචනයක් ද ලබා දෙයි.)

අපගේ නඩුවේදී, අපි නාමාවලි අන්තර්ගතය තාර කොට ප්‍රති result ලය හෑෂ් කරන අතර නිශ්චිත පියවර නොගෙන GNU සිට POSIX ආකෘතියට වෙනස් කිරීම පහත ප්‍රතිවිපාක ඇත:

  • සමාන නාමාවලි අන්තර්ගතයන් තිබියදීත්, එහි ප්‍රති ing ලයක් ලෙස චෙක්සම් වෙනස් වේ.

  • සමාන ඩිරෙක්ටරි අන්තර්ගතයන් තිබියදීත්, පෙරනිමි පැක්ස් ශීර්ෂයන් භාවිතා කරන්නේ නම් එහි ප්‍රති check ලයක් ලෙස ලැබෙන චෙක්සම් ධාවනය සිට ධාවනය දක්වා වෙනස් වේ.

දෙවැන්න පැමිණෙන්නේ, පොසික්ස් (පැක්ස්) ආකෘතියට දීර් extended කරන ලද පැක්ස් ශීර්ෂයන් ඇතුළත් වන අතර ඒවා %d/PaxHeaders.%p/%fග්නූ තාරයට පෙරනිමියෙන් හැඩ ගැසෙන ආකෘතියක් මගින් තීරණය වේ. මෙම නූල තුළ, පිරිවිතරය %pජනනය කරන තාර ක්‍රියාවලියේ ක්‍රියාවලි හැඳුනුම්පත මගින් ප්‍රතිස්ථාපනය වේ, ඇත්ත වශයෙන්ම ධාවනයෙන් ධාවනය දක්වා වෙනස් වේ. විස්තර සඳහා ග්නූ තාර අත්පොතේ මෙම කොටස සහ විශේෂයෙන් මෙය බලන්න.

දැන්, 2019-03-28 සිට ආලය, යම් කෙනෙක් සිදු මෙම ප්රශ්නය එක්සත්කමටද දායක බව පිළිගත් උඩුගං.

එබැවින්, දී ඇති භාවිත අවස්ථාවෙහිදී ග්නූ තාර භාවිතා කිරීම දිගටම කරගෙන යාමට මට පහත විකල්ප විකල්ප නිර්දේශ කළ හැකිය:

  • --format=gnu"පැරණි" ආකෘතියෙන් සංරක්ෂිතය ජනනය කිරීමට තාරට පැහැදිලිවම පැවසීමට තාර විකල්පය භාවිතා කරන්න . "පැරණි" චෙක්සම් වලංගු කිරීම සඳහා මෙය අනිවාර්ය වේ.

  • නවතම POSIX ආකෘතිය භාවිතා කරන්න, නමුත් සුදුසු පැක්ස් ශීර්ෂයක් පැහැදිලිව සඳහන් කරන්න, උදාහරණයක් ලෙස --pax-option="exthdr.name=%d/PaxHeaders/%f". කෙසේ වෙතත්, මෙය "පැරණි" චෙක්සම් වලට පසුගාමී අනුකූලතාව බිඳ දමයි.

පාර-දත්ත ඇතුළු නාමාවලි අන්තර්ගතයන්හි චෙක්සම් ගණනය කිරීම සඳහා මම නිතිපතා භාවිතා කරන Bash කේත කැබැල්ලක් මෙන්න:

( export LC_ALL=C
  find <paths> ! -type s -print0 |
  sort -z |
  tar cp --format=gnu --numeric-owner \
         --atime-preserve \
         --no-recursion --null --files-from - |
  md5sum --binary; )

මෙහි දී, <paths>චෙක්සම් මගින් ආවරණය කිරීමට අවශ්‍ය සියලුම නාමාවලිවල මාර්ග ලැයිස්තුවෙන් අවකාශය වෙන් කර ඇත. සී පෙදෙසි භාවිතා කිරීමේ පරමාර්ථය, ගොනු නාම ශුන්‍ය බයිට් වෙන් කිරීම සහ සංරක්ෂිතයේ ඇති ගොනු වල ගොනු පද්ධතියේ ස්වාධීන අනුපිළිවෙලක් ලබා ගැනීම සඳහා සොයා ගැනීම සහ වර්ග කිරීම භාවිතා කිරීම දැනටමත් වෙනත් පිළිතුරු වල ප්‍රමාණවත් ලෙස සාකච්ඡා කර ඇත.

අවට වරහන් මඟින් LC_ALLසැකසුම දේශීයව උප කුලකයක තබා ගනී .

මීට අමතරව, මම ප්රකාශ භාවිතා ! -type sසමග findGNU තාර සංරක්ෂිත නොවන සොකට් කරන්නේ: අඩි, ගොනු වල ඩිරෙක්ටරි අඩංගුව කොටසක් නම් සිදුවන තාර අනතුරු ඇඟවීම් වැළකේ. මඟ හැරුණු සොකට් ගැන දැනුම් දීමට ඔබ කැමති නම්, එම ප්‍රකාශය අතහැර දමන්න.

--numeric-ownerසියලුම ගොනු හිමිකරුවන් නොදන්නා පද්ධතිවල පවා පසුව චෙක්සම් සත්‍යාපනය කිරීමට මම තාර සමඟ භාවිතා කරමි .

කියවීමට පමණක් සවි කර ඇති උපාංගයක --atime-preserveකිසියම් <paths>බොරුවක් තිබේ නම් තාර සඳහා ඇති විකල්පය වඩා හොඳින් මඟ හැරී ඇත. එසේ නොමැතිනම් තාර නැවත පිහිටුවීමට නොහැකි වූ එක් එක් ගොනුවක් සඳහා ඔබට අනතුරු අඟවනු ලැබේ. ලිවීම සක්‍රීය කිරීම සඳහා <paths>, මම මෙම විකල්පය භාවිතා කරමි, හැෂ් ඩිරෙක්ටරිවල ප්‍රවේශ කාලරාමු ආරක්ෂා කර ගැනීමට.

ගිලස් යෝජනාවේ--no-recursion දැනටමත් භාවිතා කර ඇති තාර විකල්පය , තාර නැවත නැවත නාමාවලි වලට බැසීම වළක්වන අතර, ඒ වෙනුවට වර්ගීකරණය කළ නිමැවුමෙන් පෝෂණය වන ඕනෑම දෙයක් ගොනුව මගින් ගොනු කිරීම ක්‍රියාත්මක කරයි.find

අවසාන වශයෙන්, මම භාවිතා කරන බව සත්යයක් නොවේ md5sum: මම ඇත්ත වශයෙන්ම භාවිතා කරමි sha256sum.


0

නාමාවලි අන්තර්ගතය / ගුණාංග වෙනස් වී ඇත්දැයි තීරණය කිරීමට මම පහත ප්‍රවේශය භාවිතා කරමි:

cd /path/to/dir; ls -lnAR --time-style=+%s . | md5sum

දීර් extended කරන ලද ගුණාංගවල වෙනස්කම් නිරීක්ෂණය කිරීමට ඔබට අවශ්‍ය නම්:

cd /path/to/dir; (ls -lnAR --time-style=+%s .; getfacl -Rns .) | md5sum

සාමාන්‍ය තත්වයන් යටතේ ලිපිගොනු වල අන්තර්ගතය පරීක්ෂා කිරීම අවශ්‍ය නොවේ. මන්දයත් ගොනු වෙනස් කිරීමේ කාලය දැනටමත් ගොනු අන්තර්ගතයේ වෙනසක් පෙන්නුම් කරන බැවිනි. මෙය සමස්ත මෙහෙයුම වේගවත් කරයි.

සටහන්:

  • cd / path / to / dir - චෙක්සම් ඩිරෙක්ටරි නැවත ස්ථානගත කිරීමට ප්‍රතිරෝධී කරයි
  • -n - විවිධ uid / gid සිතියම් ගත කිරීම් සහිත පද්ධති හරහා චෙක්සම් නොනැසී පවතී
  • -A - තිත් සහිත (-a වැනි) හැර සියලුම ගොනු ඇතුළත් වේ. හා ..
  • --time-style = +% s - එය නොමැතිව චෙක්සම් කළ පසු මිනිත්තු 1 ක් තුළ සිදු කරන ලද වෙනස්කම් හඳුනාගත නොහැකි වනු ඇත, මෙම ප්‍රතිදානය rsync පිටපත් අතර ද නොනැසී පවතී (--full-time විකල්පය මෙන් නොව)

ඔබට තවමත් ලිපිගොනු අන්තර්ගතය පරීක්ෂා කිරීමට අවශ්‍ය නම්: tar c -C /path/to/dir | md5sumහෝ දීර් extended ගුණාංග සමඟ:cd /path/to/dir; (tar c .; getfacl -Rns .) | md5sum

යාවත්කාලීන කිරීම:

පුළුල් පරාසයක පද්ධතිවල එය ක්‍රියාත්මක කිරීම සඳහා මට පෙදෙසක් සැකසීමට සිදු වූ අතර දෘ l සබැඳි ගණනය කිරීම් සහ නාමාවලි ප්‍රමාණයන් ls ප්‍රතිදානයෙන් awk සමඟ පෙරීමට සිදු විය:

cd /path;LC_ALL=C ls -lnAR --time-style=+%s .|awk '{$2=0;$1~/^d/&&$5=0;print}'|md5sum

0

එක් ලයිනර්:

find directory -exec md5sum {} \; 2>&1 | sort -k 2 | md5sum

මෙය සියලුම ලිපිගොනු සහ නාමාවලි ලැයිස්තුගත md5sumකර එක් එක් සඳහා ලබා ගනී . එවිට md5sumසෑම දෙයක්ම ලබා ගනී .

md5sumඩිරෙක්ටරියක් සඳහා මුදල කළ නොහැකි ට්‍රික්කි බිට් මෙහි විසඳා ඇත , නමුත් එය අපට මෙය කියයි : md5sum: dir/sub_dir: Is a directory. අපි මෙම පණිවිඩය සම්මත ප්‍රතිදානයකට ගෙන යන්නෙමු.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.