Re: Utilisation du parametre -exec de la commande find

Top Page

Reply to this message
Author: Jean-Marc Coursimault
Date:  
To: guilde
Subject: Re: Utilisation du parametre -exec de la commande find
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