La page de manuel de GNU Find indique les états suivants:
-exec command ; [...] The string `{}' is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is alone, as in some versions of find. Both of these constructions might need to be escaped (with a `\') or quoted to protect them from expansion by the shell.
Cela va de l'homme à find
(GNU findutils) 4.4.2.
Maintenant, j'ai testé cela avec bash et dash, et les deux n'ont pas besoin d' {}
être masqués. Voici un test simple:
find /etc -name "hosts" -exec md5sum {} \;
Y at-il une coquille, pour laquelle j'ai vraiment besoin de masquer les accolades? Notez que cela ne dépend pas de savoir si le fichier trouvé contient un blanc (appelé depuis bash):
find ~ -maxdepth 1 -type d -name "U*" -exec ls -d {} \;
/home/stefan/Ubuntu One
Cela change si le fichier trouvé est passé dans un sous-shell:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d {}' \;
ls: cannot access /home/stefan/Ubuntu: No such file or directory
ls: cannot access One: No such file or directory
qui peut être résolu par:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "$0"' {} \;
contrairement à:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "{}"' \;
/home/stefan/Ubuntu One
mais ce n'est pas ce dont parle la page de manuel, n'est-ce pas? Alors, quelle coquille traite {}
d'une manière différente?