=?UTF-8?Q?[CLIWiki] page chang=C3=A9e : filtres:exemples?=

Stephane Jourdois kwisatz-shell at rubis.org
Fri Oct 27 14:33:27 CEST 2006


On Fri, Oct 27, 2006 at 12:45:13PM +0200, noreply at 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    ///


More information about the Shell mailing list