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)
---