Différences

Cette page vous affiche les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue comparative

filtres:exemples [2006/10/27 12:45] (Version actuelle)
mc
Ligne 1: Ligne 1:
 +====== Quelques Exemples Utiles ======
  
 +===== Rechercher les fichiers identiques =====
 +
 +Cette ligne permet de trouver (dans le répertoire courant et ses sous répertoires) les fichiers binairement identiques (c'est a dire strictement identiques).
 +
 +Note: Ce code étant basé sur des hashes, des collisions peuvent se produire. Il est dangereux d'​automatiser une action sur la sortie de ce script sans passer par une vérification avec diff au préalable.
 +
 +<​code>​
 +find . -type f -print0 | xargs -0 -irempl md5sum rempl | sort | \
 +        tee myfile.md5 | cut -d' ' -f1 | uniq -d | xargs -irempl grep rempl myfile.md5
 +</​code>​
 +(dup)
 +
 +
 +plus court, plus rapide, plus fiable, sans écriture disque :
 +<​code>​
 +find . -type f -print0 | xargs -0 sha1sum | sort -k 1,40 | uniq -D -w 40
 +</​code>​
 +(kwisatz)
 +
 +
 +le même avec le nom des fichiers "​identiques"​ sur la même ligne (désolé c'est pas beau, j'ai pas réussi avec sed...) :
 +<​code>​
 +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)
 +
 +3 remarques :
 +  - l'​indentation ameliore conciderablement la lisibilité
 +  -  je pense que xargs sans -n c'est mal car tu risques facilement de faire deborder ta ligne de commande
 +  - si deja tu utilises perl,  les autres filtres deviennent inutiles :
 +
 +<code bash>
 +find . -type f -print0 |
 +  xargs -n20 -0 sha1sum |
 +  perl -lne '
 +    $hash = substr($_,​0,​40);​
 +    $file = substr($_,​42);​
 +    push @{ $a{$hash} } , $file;
 +    END {
 +      for ( values %a ) {
 +        print "​@$_"​ if $#$_;
 +      }
 +    }
 +  '
 +</​code>​
 +
 +Pour le meme nombre de lignes, on a une version pure perl en utilisant Digest::​Sha1. ​
 +
 +(mc)
 +
 +===== Additionner les nombres de chaque colonne d'un fichier avec num-utils =====
 +voir [[filtres:​autres#​num-utils]]
 +<​code:​bash>​
 +nodens@clement:​~$ cat summary.txt
 +Messages Bytes
 +19      3839897
 +270     ​432394142
 +38      10003003
 +207     ​48231422
 +54      667190
 +0       0
 +0       0
 +48      4730927
 +821     ​12491225
 +155     ​402596843
 +nodens@clement:​~$ numsum -c summary.txt
 +1612 914954649
 +nodens@clement:​~$
 +</​code>​
 +
 +**//​note//​** : si on veut simplement additionner les nombres d'une seule colonne, une boucle fait aussi bien l'​affaire (© kwisatz) : 
 +
 +<​code:​bash>​
 +awk '​{print $2}' summary.txt | { b=0; while read a; do b=$(($a+$b));​ done; echo $b; }
 +</​code>​
 
filtres/exemples.txt · Dernière modification: 2006/10/27 12:45 par mc