Les +
forme de -exec
place toujours les arguments à la fin de la commande que vous donnez. C'est pourquoi, {}
qui représente les arguments, doit précéder immédiatement +
. Ceci est différent de la ;
forme de -exec
qui exécute une commande par fichier trouvé et utilise le nom du fichier quel que soit l'endroit où il se trouve. {}
apparaît.
C'est donc votre réponse... mais cela soulève une autre question : pourquoi 其の est en place en premier lieu, ce qui est un peu plus obscur.
Avec +
, le -exec
exécute votre commande aussi peu de fois que possible, en passant autant de noms de fichiers que possible à la place de {}
. En particulier s'il y a de nombreux fichiers trouvés, cette forme de -exec
n'est utilisable qu'avec des commandes qui se comportent de la même manière - ou du moins d'une manière cohérente avec ce que vous souhaitez - lorsque les noms de fichiers sont répartis entre plusieurs invocations de la commande, comme c'est le cas lorsque tous les noms de fichiers apparaissent lors d'une seule invocation.
Les commandes qui acceptent un nombre variable d'arguments de nom de fichier en une seule invocation, afin de produire le même effet que si la commande était exécutée une fois pour chaque nom de fichier, les acceptent souvent en tant qu'arguments de fin. Il existe, bien sûr, des exceptions comme cp
y mv
avec des cibles de répertoire (bien que vous puissiez passer -t _dir_
pour les faire fonctionner avec +
). Il est également un peu plus facile de raisonner à ce sujet, en ce sens que lorsque vous écrivez ls -l
suivi de noms de fichiers, on a l'impression que ls -l
est "la commande" que vous exécutez pour opérer sur les fichiers nommés, mais lorsque vous écrivez ls
suivi des noms de fichiers, suivi de -l
mais ce n'est pas tout à fait l'impression que l'on a.
En ce qui concerne les mesures à prendre, votre approche consistant à mettre en place des options telles que -l
avant le {}
est bonne. Cela présente d'autres avantages : bien que cela soit moins courant sur les systèmes GNU/Linux comme Ubuntu que sur d'autres systèmes d'exploitation de type Unix, certaines commandes n'acceptent pas d'options après l'apparition d'un argument qui n'en est pas un. (Voir getopt(3) pour plus de détails).
Puisque vous exécutez ls
vous pouvez envisager d'utiliser find
's -ls
au lieu de -exec
. Notez également qu'il n'est pas nécessaire de citer +
puisque, contrairement à ;
Les coquilles ne traitent pas les +
spécialement le caractère.