Principe de fonctionnement et intérêt :

La plupart des outils que j'ai pu tester étaient assez lents dans leur fonctionnement. Le présent script étant principalement utilisé sur des serveurs, j'ai tenté d'optimiser un peu la recherche et l'analyse.
Ainsi, lorsque l'on cherche à comparer le contenu de répertoires il peut arriver que ces répertoires soient sur des disques physiques différents.

Afin de rechercher plus vite on peut lancer plusieurs processus simultanéement. Le problème est que si on lance ces processus sur le même disque, on va se retrouver avec une contention au niveau du disque. C'est pourquoi le script tente de vérifier si les répertoires se trouvent ou sur le même disque. Dans l'exemple ci-dessous, plusieurs répertoires sont indiqués en ligne de commande. Comme ces répertoires sont sur des disques différents, le script traitera en parallèle les trois pour la recherche de fichiers[1].

Utilisation :

  • Première nécessité : Un shell digne de ce nom ! (KSH, Bash, Tcsh, Zsh, etc.)[2].
  • Dernière nécessité[3] : Lancer votre ligne de commande.

Exemple d'utilisation :

~# ./allcompare.sh -o ./Results4.comp -s '/mnt/partage/::/mnt/stockage/::/mnt/grosvol/' -i 50
+ Verifications... Done
 - sha1sum will be used.
 - Destination file will be : ./Results4.comp
 - Temp. dir. will be /tmp/allcompare.sh.24559
+ Analyse arguments... Done
+ Tri des FS... Done
+ Recherche des fichiers...
            sur /mnt/partage/... Done
            sur /mnt/grosvol/... Done
            sur /mnt/stockage/... Done
  Recherche des fichiers... Done
+ Recherche des doublons par taille... Files: 4470 - 0byte: 865 - Uniques: 0 - Doublons: 49 - Errors: 1 ... Done
+ Analyse des doublons... 0%....10%....20%....30%....40%......55%....65%....75%....85%....95%.100% Done

Exemple de résultat (avec la commande utilisée ci-dessus) :

################################################################################
1) 2 fichiers de 49 octets [hash : 12cf188999d9640f9af759d6b1c601535da87398]
1) /mnt/stockage/Sauvegarde_LocoWeb/20070404/www.flyou.net/simple/modules/FCKeditorX/FCKeditor/editor/images/arrow_ltr.gif
2) /mnt/stockage/loco/www.flyou.net/simple/modules/FCKeditorX/FCKeditor/editor/images/arrow_ltr.gif
################################################################################
2) 8 fichiers de 49 octets [hash : 1ddefee04dc9e9b2576dc34eebcfa3de4aa82af9]
1) /mnt/stockage/Xavier/programme/Appz/winvnc/setup.lid
2) /mnt/stockage/Xavier/programme/x86/setup/setup.lid
3) /mnt/grosvol/Xavier/stockage/System Volume Information/_restore{B913CFC4-85E1-4B1A-8199-ED123641429C}/RP1434/A0915362.lid
4) /mnt/grosvol/Xavier/stockage/System Volume Information/_restore{B913CFC4-85E1-4B1A-8199-ED123641429C}/RP1434/A0915369.lid
5) /mnt/grosvol/Xavier/stockage/System Volume Information/_restore{B913CFC4-85E1-4B1A-8199-ED123641429C}/RP1434/A0920147.lid
6) /mnt/grosvol/Xavier/stockage/System Volume Information/_restore{B913CFC4-85E1-4B1A-8199-ED123641429C}/RP1434/A0919736.lid
7) /mnt/grosvol/Xavier/stockage/Applications/Ekod21.F/SETUP16.AN/SETUP.LID
8) /mnt/grosvol/Récupération P/WebSphere/AppServer406/binaire/setup.lid
################################################################################
5) 4 fichiers de 49 octets [hash : 356359c447b5bedfcae514d59a0841c7a0c7fe19]
1) /mnt/partage/NoteBook/C/temp/coppermine-1.1.0/themes/water_drop/images/bg.gif
2) /mnt/stockage/Sauvegarde_LocoWeb/20070404/www.flyounet.net/Gally/themes/water_drop/images/bg.gif
3) /mnt/stockage/Vaio/Vaio_D/G.Pourcel/Mes documents/www/gpourcel/www.flyounet.net/Gally/themes/water_drop/images/bg.gif
4) /mnt/grosvol/MovieX/_Sauvegarde_PC_/FTP/www.flyounet.net/Gally/themes/water_drop/images/bg.gif

Un peu d'aide :

~# ./allcompare.sh -h
 [-h] [-P] [-M|-S] [-R] [-i bytes] [-I bytes] [-o filename] [-t directory] [-f filename|-s FS]*
 -h             this help
 -K             do not remove temporary folder at end
 -Q             do not write any information (quiet mode) (only errors will be written)
 -P             do not parallelize research
 -M             use md5sum for file analyze
 -S             use sha1sum for file analyze (default)
 -R             don't search recursivly
 -i bytes       don't search files that have more than -i bytes
 -I bytes       don't search files that have less than -I bytes
 -o filename    write results to this file
 -t directory   use this directory as prefix for temporary files
 -f filename    find FS in the file instead of argument
 -s FS          filesystem are separated by a semi colon
 *              Mandatory field

A vu de nez, ça devrait se comprendre tout seul, mais bon, dans le doute...
Le -K est utile si on veut débugguer,
Le -Q est utile pour les batch,
Le -P existe mais c'est dommage de l'utiliser, ça ralenti grandement la recherche,
Le -M est là si le md5sum n'existe pas...
Le -R est là pour les cochons qui mettent tout dans le même répertoire,
Les -i et -I[4] permettent de limiter la recherche sur des fichiers d'une taille donnée,
Le -o est là pour indiquer un fichier de sortie,
Le -t m'est utile pour les batchs (maintenant ça peut servir à quelqu'un d'autre),
Le -f ressemble au -s sauf qu'il faut le mettre dans un fichier,
Il est obligatoire d'avoir au le -f ou le -s...

Tu aimes l'anglais et ce bout de script ?

Engages toi et deviens traducteur officiel, de ce billet, de ce script qui marchotte et du reste du site. Il est cependant nécessaire que tu répondes à quelques critères afin que s'avancent vers toi la gloire, la félicité, le bonheur, les femmes, par contre il n'y a pas d'argent à se faire... :

  • Moins de 29 ans et demi,
  • Bac +8 minimum,
  • 19 ans trois quart de pratique dans la traduction français - anglais,
  • 3d4+3 ans de pratique dans la traduction anglais - français,
  • 6 ans de pratique dans les massages,
  • Ouvert(e) d'esprit,
  • Prenant des initatives,
  • Sentant bon la fraise.

Il est évident que si tu t'engages en étant brune[5], et bien de ta personne ce sera un gros plus. Puisque, j'écris souvent des scripts (qui ne servent pas forcément), je peux potentiellement avoir plein de poste à pourvoir dans le même domaine.

Notes

[1] Si j'avais utilisé ce script seulement sur /mnt le script n'aurait lancé qu'un seul processus.

[2] Mieux vaut du KSH; j'ai pas eu le temps de tester ailleurs

[3] Ah bon déjà ? Bah, oui ! Sauf si vous préférez la version longue avec configuration de fichiers...

[4] Minuscule et majuscule...

[5] Si ton prénom est Gwendoline, je t'épouse de suite et je vire ma femme !