Regis Gras <Regis.Gras@???> a dit:
> Pour faire un test, j'ai crée un fichier essai_bidon.pl que j'ai rangé
> dans un repertoire: /home/dir.essai/dir.bidon
> find . -name essai_bidon.pl retrouve sans probléme
> ./dir.essai/dir.bidon/essai_bidon.pl
> Pour le recopier, par exemple dans /tmp, en le prefixant par toto, j'ai
> essayé:
> find . -name essai_bidon.pl -exec -exec cp {} /tmp/toto`basename
> {}` \;
> D'où ma question.
> Comment faut il ecrire la (ou les) commandes que l'on voudrait faire
> executer
> par l'option -exec de la commande find.
Le pb est que le shell interprète la commande que tu passes, avant
même que find ne la voie (c'est pour cela que tu mets \; à la fin au
lieu de ; )
Donc si tu exécutes
find . -name essai_bidon.pl -exec cp {} /tmp/toto`basename {} `;
basename est exécuté avant le find : or basename {} renvoie simplement
{} qui sera ensuite remplacé par find :
c'est équivalent à taper
find . -name essai_bidon.pl -exec cp {} /tmp/toto{};
Backslasher les backticks ne marche pas non plus.
Une solution brutale est de créer une chaîne que tu feras exécuter (et
interpréter) ensuite par bash :
find . -name essai_bidon.pl -exec bash -c 'cp {} /tmp/toto`basename {}`' \;
Résultat :
ls -la /tmp/toto*
-rw-rw-r-- 1 jmc jmc 0 jan 5 16:48 /tmp/totoessai_bidon.pl