Cette version est remplie de débug. Cependant, elle est fonctionnelle et la limite de fonctionne pour l'instant que sur la recherche des fichiers. Pour contrôler cette fonction, l'argument -y sera utilisé.

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
 -y max proc.   number of maximum concurrent process (default 10)
 -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,
Le -y est utile pour contrôler le nombre maximum de processus devant tourner simultanément (valeur par défaut 10),
Les -i et -I[1] 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...

Notes

[1] Minuscule et majuscule...