Utilisation du sous interpréteur de commande dans un exec de find

J’avais besoin de lancer une commande en fonction de la date de modification d’un fichier, je me suis donc naturellement orienté vers le find/exec classique. Mais un problème est survenu. La commande que je souhaitais exécuter sur les fichiers ainsi retournés nécessitait en paramètre un transformation du nom retourné par le {} du exec (en l’occurrence il fallait que je fasse un basename sur le {}).

Le souci est que si l’on écrit cette commande :

delovan@x-301:~$ find . -type f -exec echo `basename {}` ;

Le basename {} sera interprété par le shell courant et non exécuté pour chaque retour du find comme je le voudrais. La solution de contournement est de transformer mon basename en chaîne de caractères et de lancer une instance bash avec cette chaîne dans le paramètre -c.

Pour cette commande, on a donc :

delovan@x-301:~$ find . -type f -exec bash -c "echo `basename {}`" ;

Et là tout fonctionne :).

Damien Gustave

Read more posts by this author.