Je me demande de savoir quelle est la différence entre l'utilisation +
et ;
la fin de la -exec
commande lorsque j'utilise en find
commande?
find .... -exec ... \;
CONTRE
find .... -exec ... +
-exec ... \;
exécutera un élément après l'autre. Donc, si vous avez trois fichiers, la ligne exec s'exécutera trois fois.
-exec ... {} +
est pour les commandes qui peuvent prendre plus d'un fichier à la fois (par exemple cat
, stat
, ls
). Les fichiers trouvés par find
sont enchaînés comme une xargs
commande. Cela signifie moins de bifurcation et pour les petites opérations, cela peut signifier une accélération substantielle.
Voici une démonstration des performances contenant 10 000 fichiers vides.
$ mkdir testdir
$ touch testdir/{0000..9999}
$ time find testdir/ -type f -exec cat {} \;
real 0m8.622s
user 0m0.452s
sys 0m8.288s
$ time find testdir/ -type f -exec cat {} +
real 0m0.052s
user 0m0.015s
sys 0m0.037s
Encore une fois, cela ne fonctionne que sur les commandes qui peuvent prendre plusieurs noms de fichiers. Vous pouvez savoir si votre commande est comme ça en regardant sa page de manuel. Voici le synopsis de man cat
:
SYNOPSIS
cat [OPTION]... [FILE]...
Les points de suspension activés [FILE]...
signifient qu'il peut prendre plusieurs fichiers.
+
ne peut être utilisé que sur des commandes uniques et vous devez en avoir exactement une {}
sur la ligne. \;
peut fonctionner avec plusieurs groupes de zéro à plusieurs.
\;
, la commande exécutée seraitcat 1; cat 2; cat 3
. Avec+
, la commande exécutée seraitcat 1 2 3
.+
n'est pas POSIX, donc peut ne pas être disponible sur les systèmes non Linux. Pas un problème si vous ne quittez jamais la plate-forme, mais bon de savoir si vous devez utiliser Solaris. :)-exec <command> {} ';'
parce que c'est plus facile sur ma frappe (je peux toucher le texte mais je n'ai pas exactement la meilleure technique).-exec ... {} +
c'est POSIX. Voir: pubs.opengroup.org/onlinepubs/9699919799/utilities/…-exec ... {} +
extension a été suggérée pour être incluse dans les spécifications POSIX en 2001 et ratifiée dans le numéro 6 de POSIX en 2004. Il est possible que la version de Solaris à laquelle vous êtes habitué soit plus ancienne que la norme POSIX (ou cible simplement une version antérieure).