Différence entre ‘+’ et ‘\;’ à la fin de la commande -exec
Bonjour à tous,
j’écris juste un petit billet car je me suis demandé quelle était la différence entre l’utilisation du +
et \;
à la fin de -exec
lors de l’utilisation de la commande find
?
-exec ... \; lance une commande après l’autre. Si vous avez trois fichiers, la ligne de commande va être exécuter trois fois.
-exec ... {} + est utilisé pour les commandes qui peuvent prendre en argument plus d’un fichier à la fois (exemple : cat
, stat
, ls
). Le fichier trouvé par find
sont chaîné ensemble comme avec la commande xargs
.
Voici un petit comparatif entre les deux commandes sur 10 000 fichiers :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
morgan@morgan-Studio-1749$ cd /tmp morgan@morgan-Studio-1749:/tmp$ mkdir testdir morgan@morgan-Studio-1749:/tmp$ touch testdir/{0000..9999} morgan@morgan-Studio-1749:/tmp$ time find testdir/ -type f -exec cat {} \; real 0m10.779s user 0m0.691s sys 0m9.908s morgan@morgan-Studio-1749:/tmp$ time find testdir/ -type f -exec cat {} + real 0m0.055s user 0m0.018s sys 0m0.037s morgan@morgan-Studio-1749:/tmp$ |
On peux voir que l’utilisation du +
(opérateur de concaténation) améliore grandement la vitesse d’exécution (attention, cela ne fonctionne que sur les commandes qui accepte plusieurs fichiers en paramètres).
Qu’est-ce qu’il se passe vraiment ?
Avec \;
, la commande exécuté seras : cat 1; cat 2; cat 3
. Avec +
, la commande exécuté seras : cat 1 2 3