On Fri, Oct 27, 2006 at 12:45:13PM +0200, noreply@asyd.net wrote:
@@ -25,8 +25,32 @@ find . -type f -print0 | xargs -0 sha1sum | sort -k 1,40 | uniq -D -w 40 | \ perl -e '@f=();sub p{print "@f\n";@f=()};while(<>){chop;($h,$f)=split / /;p if $g and $h ne $g;$g=$h;push @f,$f};p' </code> (kwisatz)
En préambule, effectivement ce code est naze, je pense qu'il vaut mieux le supprimer carrément. Je propose de ne laisser que la version courte et efficace : find . -type f -print0 | xargs -0 sha1sum | sort -k 1,40 | uniq -D -w 40 et de supprimer tout le reste.
+ 3 remarques : + - l'indentation ameliore conciderablement la lisibilité
mais pas le copier/coller :-)
+ - je pense que xargs sans -n c'est mal car tu risques facilement de faire deborder ta ligne de commande
Heureusement que non, xargs c'est fait pour ça :-) xargs --show-limits pour voir la limite sur ton système, et xargs -s pour utiliser une valeur différente.
+ - si deja tu utilises perl, les autres filtres deviennent inutiles : + + <code bash> [..] + </code> + + Pour le meme nombre de lignes, on a une version pure perl en utilisant Digest::Sha1.
Du coup pourquoi ne pas donner direct le script perl qui va bien, et qui en profitera pour comparer les binaires réellement pour éviter les collisions ? Celui-là ne va pas, parce-qu'il bufferise le résultat entier de la commande précédente, ce qu'a déjà fait le sort mais qu'on ne pouvait pas éviter. on double la conso mémoire de la solution complête, et on impacte dramatiquement les perfs. ++ PS: la prochaine fois on ajoutera un ~~discussion~~ ;-) -- /// Stephane Jourdois /"\ ASCII RIBBON CAMPAIGN \\\ ((( Consultant securite \ / AGAINST HTML MAIL ))) \\\ 24 rue Cauchy X /// \\\ 75015 Paris / \ +33 6 8643 3085 ///