2012-12-08 18 views
6

में फ़ाइल चेकसम प्राप्त करने का कॉम्पैक्ट तरीका मैं पर्ल में फ़ाइल चेकसम प्राप्त करने के तरीकों की तलाश में हूं लेकिन सिस्टम कमांड cksum निष्पादित करके नहीं - इसे पर्ल में ही करना चाहूंगा क्योंकि स्क्रिप्ट को यूनिक्स के बीच पोर्टेबल होना चाहिए और विंडोज। cksum <FILENAME> | awk '{ print $1 }' यूनिक्स पर काम करता है लेकिन स्पष्ट रूप से विंडोज़ में नहीं। मैं MD5 का पता लगाया है, लेकिन यह एक फ़ाइल संभाल रही की तरह लगता है के लिए आवश्यक है और आम तौर पर इसे पाने के लिए एक बहुत ही कॉम्पैक्ट रास्ते की तरह प्रतीत नहीं होता है कि डेटा (एक-लाइनर बेहतर)।पर्ल

क्या कोई बेहतर तरीका है?

उत्तर

12

यहाँ तीन अलग-अलग आधार पर तरीकों पर मॉड्यूल उपलब्ध है कर रहे हैं:

use Digest::MD5 qw(md5_hex); 

use File::Slurp; 
print md5_hex(read_file("filename")), "\n"; 

use IO::All; 
print md5_hex(io("filename")->all), "\n"; 

use IO::File; 
print md5_hex(do { local $/; IO::File->new("filename")->getline }), "\n"; 

नहीं पूरी तरह से एक-पंक्ति लेकिन बहुत करीब।

किसी भी हैश एल्गोरिथ्म आप चाहते हैं, उदा Digest::MD5 बदलें SHA1।

IO::File कोर में है और हर जगह उपलब्ध होना चाहिए, लेकिन यह है कि समाधान मैं व्यक्तिगत रूप से सबसे अधिक नापसंद है। वैसे भी, यह काम करता है।

+0

मुझे फ़ाइल :: स्लर्प 'पीपीएम' – amphibient

+3

में नहीं मिला, यह ठीक है - यह इस' ओपन (हैंडल, "<", $ dirItemPath) की तरह काम करता है; मेरी $ cksum = md5_hex (); ' – amphibient

+0

मैं अधिक विकल्पों के साथ अपने जवाब नवीनीकृत किया है। –

1

यह भी काम करता है:

use Digest::MD5 qw(md5_base64); 
... 
      open(HANDLE, "<", $dirItemPath); 
      my $cksum = md5_base64(<HANDLE>); 
      print "\nFile checksum = ".$cksum; 
5

मैं खिड़कियों में मेरे लिए ऊपर काम के किसी भी नहीं कर सके, मैं हमेशा एक गलत MD5 मिलेगा। मुझे लगता है कि यह LINEBREAK में मतभेद की वजह से किया जा रहा था, लेकिन डॉस करने के लिए फ़ाइल को परिवर्तित संदिग्ध मिला या यूनिक्स के लिए कोई फर्क पड़ा। एक ही फ़ाइल के साथ एक ही कोड मुझे लिनक्स और विंडोज़ में गलत एक सही जवाब देगा।

use Digest::MD5; 
open ($fh, '<myfile.txt'); 
binmode ($fh); 
print Digest::MD5->new->addfile($fh)->hexdigest; 

मुझे आशा है कि यह विंडोज़ में मुश्किल हो रही अन्य लोगों को मदद मिलती है, मुझे लगता है मैं किसी भी समस्याओं का उल्लेख नहीं मिला यह बहुत अजीब है कि: प्रलेखन पढ़ना, मैं अंत में कुछ है कि दोनों विंडोज और लिनक्स में काम करेगा पाया विंडोज़ पर ...