corrupted Δημοσ. 2 Δεκεμβρίου 2012 Δημοσ. 2 Δεκεμβρίου 2012 Εχω καποια αρχεια (αρκετα) και θελω με μια κινηση να παραγω md5 και sha1 sums, για ολα τα αρχεια. Δηλαδη μια εντολη που να διαβασει ολα τα αρχεια μεσα σε φακελους/υποφακελους κλπ. και να παραγει ενα αρχειο sum σε στυλ λιστας (το καθε sum του καθε αρχειου σε δικη του γραμμη). Καπως ετσι: md5sums.txt ----------------------------------------------------------- 37b2b85d86cf045fc06e612a1a9c9706 /path/to/file1.iso d4d9472b5915f61ee9809c44e7fe9bad /another/path/to/file2.iso 73284a78b3171bc5cb1efd2906b09bd3 /some/path/file3.iso κλπ κλπ... Γινεται?
pmav99 Δημοσ. 2 Δεκεμβρίου 2012 Δημοσ. 2 Δεκεμβρίου 2012 Το δοκίμασα σε Python 3.3. Λογικά και 3.2 θα είναι οκ. Σε Python2 δε δοκίμασα αλλά νομίζω ότι δε θα τρέχει. Νομίζω είχε αλλάξει το API για τα hashes. To σώζεις σε ενα αρχείο με κατάληξη *.py και το βάζεις στο root folder. Δεν ακολουθεί symbolic links, αλλά αν το θες γίνεται. Αν θες να αλλαξεις τον τύπο του hash απλά αλλάζεις το md5 σε ένα εκ των sha1(), sha224(), sha256(), sha384() sha512() http://docs.python.o...ry/hashlib.html Αν δεν ξέρεις πως να το τρέξεις, ρώτας. > import os import hashlib DELIMITER = "\t" OUTPUT = "md5sums.txt" # create the hash object m = hashlib.md5() # walk the directory tree recursively and calculate the hash for each file lines = [] for dirpath, dirnames, filenames in os.walk("."): for filename in filenames: path = os.path.join(dirpath, filename) m.update(filename.encode("utf8")) lines.append(m.hexdigest() + DELIMITER + path) # write the results to a text file with open(OUTPUT, "w") as f: f.write("\n".join(lines)) ps. Απορία. Έχω βάλει κενά στον κώδικα όμως τα μετατρέπει σε tabs. Γιατί? 2
warlock9_0 Δημοσ. 2 Δεκεμβρίου 2012 Δημοσ. 2 Δεκεμβρίου 2012 δε χρειάζεται python απλό bash script είναι
pmav99 Δημοσ. 2 Δεκεμβρίου 2012 Δημοσ. 2 Δεκεμβρίου 2012 Για εμένα είναι πιο σύντομο να το γράψω σε Python (που ξέρω) από το να το ψάχνω σε bash
warlock9_0 Δημοσ. 2 Δεκεμβρίου 2012 Δημοσ. 2 Δεκεμβρίου 2012 >for f in * do echo `md5sum $f` > hashfile done αυτό το βάζεις μέσα στο φάκελο με τα αρχεία γίνεται και παραμετρικό αν θες να παίρνει ότι φάκελο θες 1
imitheos Δημοσ. 2 Δεκεμβρίου 2012 Δημοσ. 2 Δεκεμβρίου 2012 > % find /path/to/dir -type f -exec sha1sum {} \; |tee /tmp/checksums.sha1 ή % cd /path/to/dir % find . -type f -exec sha1sum {} \; |tee /tmp/checksums.sha1 Θα βρει όλα τα αρχεία που βρίσκονται στο /path/to/dir και όλους τους υποκαταλόγους και θα τρέξει την sha1sum εμφανίζοντας στην οθόνη το αποτέλεσμα και παράλληλα αποθηκεύοντας το στο checksums.sha1 αρχείο. Αν θέλεις τα αρχεία να έχουν full path χρησιμοποιείς την 1η εκδοχή. Αν σε εμποδίζει το full path και δεν το θέλεις χρησιμοποιείς τη 2η. 1
corrupted Δημοσ. 2 Δεκεμβρίου 2012 Μέλος Δημοσ. 2 Δεκεμβρίου 2012 Ειστε τελειοι! Τρεις διαφορετικοι τροποι και παιζουν και οι τρεις. Ευχαριστω για τον κοπο σας, ειδικα τον pmav99 που εγραψε ολοκληρο python script!
corrupted Δημοσ. 3 Δεκεμβρίου 2012 Μέλος Δημοσ. 3 Δεκεμβρίου 2012 Το δοκίμασα σε Python 3.3. Λογικά και 3.2 θα είναι οκ. Σε Python2 δε δοκίμασα αλλά νομίζω ότι δε θα τρέχει. Νομίζω είχε αλλάξει το API για τα hashes. Για να σου δωσω και λιγο feedback αγαπητε pmav99, το script σου τρεχει και με Python2. Μολις το ετρεξα σε Windows 8 με ActivePython-2.7.2.5 Και σε Linux φυσικα, κανενα προβλημα (Python 2.7.3)
pmav99 Δημοσ. 3 Δεκεμβρίου 2012 Δημοσ. 3 Δεκεμβρίου 2012 Για να σου δωσω και λιγο feedback αγαπητε pmav99, το script σου τρεχει και με Python2.Cool
firewalker Δημοσ. 3 Δεκεμβρίου 2012 Δημοσ. 3 Δεκεμβρίου 2012 >find ./my_folder -type f -print0 | xargs -0 md5sum >> MyMD5file
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα