odstraneni duplicitnich souboru

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Neděle Březen 16 12:38:08 CET 2003


On Fri, 14 Mar 2003, Zdenek Pytela wrote:

> damned píše:
> > z konference jsem vycucal toto:
> > 
> >    find "$@" -type f -exec md5sum '{}' ';' >> ALL
> >    cat ALL | sort > SUMS
> >    cut -f 1 -d ' ' SUMS | uniq -d > DUPL
> >    join SUMS DUPL
> no tohle tedy je něco; co zkusit více přepínačů a méně zbytečných příkazů?
> 
> md5sum `find . -type f` | sort > seznam
> sort -u -k1,1 seznam >seznam2

Az na to, ze tohle dela neco jineho.

Puvodni sada prikazu (pravda, ten cat je tam docela prebytecny a leccos
jineho by asi take slo zoptimalizovat, treba -exec u find by bylo mnohem
efektivnejsi nahradit xargs) vygeneruje pouze duplicity, zatimco vystup
toho druheho obsahuje z kazde mnoziny souboru majicich stejny MD5 prave
jeden soubor a to ten, jehoz jmeno je prvni v trideni pouzitem prikazem
sort.

Kdyz mluvime o zbytecnych prikazech, tak ted druhy sort je kanon na
vrabce, protoze uniq -w32 by udelalo totez s mnohem mensim usilim
(ten druhy sort si musi minimalne vyrobit docasny soubor, kam to
presype, nez zjisti, ze uz je to vlastne setridene). Tedy principialne
je kanon na vrabce i prvni sort, protoze na prvnim klici (MD5) staci pouze
sgrupovat zaznamy majici stejnou hodnotu tohoto klice, ale to by se uz
muselo nejak programovat.


On Fri, 14 Mar 2003, Zdenek Pytela wrote:

> Michal Kubecek píše:
> > Tohle poměrně brzy zkrachuje na "too many arguments".
> 	Kolik je to poměrně brzo? Jeden můj houm má 13k položek (571k znaků)
> a echo `find` pohoda. To jen pro představu. Při
> echo `perl -e 'print "a"x10000000;'`
> se tedy systém trochu zapotil, pravda, i si zaswapoval, ale žádný krach
> nevidím. Je u mě něco špatně?

Pri spusteni externiho programu se musi vsechny argumenty (mozna dokonce
argv + envp) vejit do ARG_MAX, neb to vyzaduje execve(). Na Linuxu to
byvalo neco jako 128 kB, ale treba je to ted uz vic.

Pri spusteni interniho prikazu zalezi na libovuli pouziteho shellu (a
mnozstvi volne virtualni pameti), jak dlouhy prikaz je ochoten vygenerovat
a nasledne provest.


--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux