Portál AbcLinuxu, 26. července 2025 10:57


Dotaz: md5sum a standardní výstup

4.12.2005 21:30 diverman | skóre: 32 | blog: život s tučňáčkem
md5sum a standardní výstup
Přečteno: 416×
Odpovědět | Admin
Ahoj přátelé, tvořím skript pro hromadné zpracování kontrolních součtů md5sum. Příkaz
md5sum -c -v MD5SUM
vypíše:
test1.txt   OK
test2.txt   OK
test3.txt   OK
test4.txt   CHYBNÝ
To je v pořádku. Teď chci tento výstup zapsat do souboru MD5SUM_RESULT, abych mohl výsledky dále zpracovávat:
md5sum -c -v MD5SUM > MD5SUM_RESULT
Ale vzniklý soubor MD5SUM_RESULT je prázdný. Zkouším to tedy jinak:
echo `md5sum -c -v MD5SUM` > MD5SUM_RESULT
Soubor MD5SUM_RESULT je opět prázdný... Kdybyste mě někdo nakopnul, co dělám špatně...
díky Pavel
deb http://ftp.cz.debian.org/debian jessie main contrib non-free
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

4.12.2005 21:40 Michal Karas | skóre: 45 | blog: /dev/random
Rozbalit Rozbalit vše Re: md5sum a standartní výstup
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj, zkus:
md5sum -c -v MD5SUM 2> MD5SUM_RESULT
4.12.2005 21:55 diverman | skóre: 32 | blog: život s tučňáčkem
Rozbalit Rozbalit vše Re: md5sum a standartní výstup
Díky moc, to je vono!
deb http://ftp.cz.debian.org/debian jessie main contrib non-free
4.12.2005 22:02 Michal Karas | skóre: 45 | blog: /dev/random
Rozbalit Rozbalit vše Re: md5sum a standartní výstup
Ale nechápu proč to md5sum posílá na stderr. V Arch Linuxu se přitom chová korektně.
4.12.2005 22:16 diverman | skóre: 32 | blog: život s tučňáčkem
Rozbalit Rozbalit vše Re: md5sum a standartní výstup
Já to dělám v Debianu a fakt je to do stderr. Taky mě to překvapilo. Teď ještě musím z toho vyparsovat soubory OK a soubory neeOK :-(
deb http://ftp.cz.debian.org/debian jessie main contrib non-free
4.12.2005 22:32 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: md5sum a standartní výstup
V SuSE 10.0 to posílá také na standardní výstup
  mike@lion:~/tmp> md5sum --version
  md5sum (GNU coreutils) 5.3.0
  Written by Ulrich Drepper and Scott Miller.
Jakou verzi máte vy?
David Watzke avatar 4.12.2005 22:42 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: md5sum a standartní výstup
Gentoo / amd64, stejná verze, taky OK.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
4.12.2005 22:55 diverman | skóre: 32 | blog: život s tučňáčkem
Rozbalit Rozbalit vše Re: md5sum a standartní výstup
Heh, no v té mé ani přepínač --version nefunguje. Takže asi mám nějakou prehistorickou verzi. (Debian Sarge)
deb http://ftp.cz.debian.org/debian jessie main contrib non-free
4.12.2005 22:58 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: md5sum a standartní výstup
Tak to nejspíš nebude GNU verze… :-)
4.12.2005 23:05 diverman | skóre: 32 | blog: život s tučňáčkem
Rozbalit Rozbalit vše Re: md5sum a standartní výstup
Hmmm čekal bych, že program jako md5sum instalovaný z "pravého debiálního" (heh to je teda výraz :-) ) mirroru bude GNU.
deb http://ftp.cz.debian.org/debian jessie main contrib non-free
5.12.2005 10:34 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: md5sum a standartní výstup
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pro inspiraci jsem se pokusil něco podobného udělat.

Následující program projde všechny soubory v daném adresáři, u každého vypočítá md5sum a výsledky uloží do XML souboru. Formát XML jsem vybral záměrně, aby bylo možné uložit stromovou strukturu, kdybych procházel adresář rekurzivně (což prozatím nedělám). Také se rozumně vypořádá i s podivnými názvy souborů. Navíc ho lze "hezky" zobrazovat v prohlížeči ;-)

Při dalším spuštění program otevře XML soubor a porovná kontrolní součty se skutečností. Vypíše, které soubory se změnily.

Chtělo by to ještě přidat kontrolu chybových stavů, zjišťování, který soubor přibyl či ubyl, ale o to tu, myslím, nešlo.
import os, sys, md5
from elementtree.ElementTree import Element, SubElement, ElementTree, dump

def CalcMD5(filename):
  buffersize = 1000000
  sum = md5.new()
  f = open(filename)
  while True:
    data = f.read(buffersize)
    if not data: break
    sum.update(data)
  f.close()
  return sum.hexdigest()


def StoreChecksums(basedir, xmlname):

  root = Element("checksums")
  Files = SubElement(root, "Files")
  for name in os.listdir(basedir):
    name_fullpath = os.path.join(basedir, name)
    if not os.path.isfile(name_fullpath): continue
    md5sum = CalcMD5(name_fullpath)
    elem_file = SubElement(Files, "file") 
    elem_file.set("name", name_fullpath)
    elem_file.set("md5sum", md5sum)
 
  tree = ElementTree(root)
  dump(root)
  tree.write(xmlname, encoding="utf-8")

def CheckChecksums(basedir, xmlname):
  root = ElementTree(file=xmlname)
  files_old = root.find('Files')
  for file_old in files_old:
    name = file_old.get('name')
    md5sum_old = file_old.get('md5sum')
    md5sum_new = CalcMD5(os.path.join(basedir, name))
    if not md5sum_old == md5sum_new:
      print 'File', name, 'has changed!'

###############################  MAIN #############

xmlname = 'md5sums.xml'
basedir = '.'

if not os.path.exists(xmlname):
  print 'md5sums have not been calculated yet. Creating', xmlname
  StoreChecksums(basedir, xmlname)
  sys.exit(0)

CheckChecksums(basedir, xmlname)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.