Re: [ssfr] Boucle for récursive

[ Thread Index | Date Index | More debianworld.org/shellscript-fr Archives ]


On 2008-04-14 13:52:50 +0100, Edi Stojicevic wrote:
> * Steve <dlist@xxxxxxxxxx> [2008-04-14 14:42:34 +0200] wrote :
> > Je travaille sur un projet en PHP qui contient plusieurs répertoires.
> > J'édite mes fichiers avec vim et celui-ci me fait des sauvegardes
> > régulières dans un fichier *~, ce qui me convient parfaitement. Par
> > contre quand je dois mettre les fichiers sur le serveur, j'aimerai
> > éviter de mettre les fichiers *~. J'ai donc écrit un petit script en
> > shell, nettoyer.sh, qui est sensé effacer tous ces fichiers *~. Je dois
> > donc faire une boucle for du genre :
> > 
> > for i in *~
> > do
> > rm -i $i
> > done

Deux trous de sécurité potentiels: avec les fichiers dont le nom
commence par "-" et ceux dont le nom contient un espace (en fait,
caractère de $IFS).

  rm -i -- "$i"

ou

  rm -i "./$i"

> > Le problème c'est que ce script s'arrête au répertoire courant. Ma
> > question est simple : comment faire pour qu'il descende récursivement
> > dans tous les répertoires de mon projet.
> > 
> 
> find ~/project/ -iname "*~" -exec rm {} \;

Problème similaire avec les fichiers dont le nom commence par "-".

Plus efficace: utiliser l'option -print0 et xargs -0.

Ou avec zsh:

  rm -i -- **/*~

avec le risque d'avoir une ligne de commande trop longue, auquel
cas le builtin rm de zsh (module zsh/files) résout le problème.
Ou utiliser zargs.

-- 
Vincent Lefèvre <vincent@xxxxxxxxxx> - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

---


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/