Re: shell

Top Page

Reply to this message
Author: Fernando
Date:  
To: guilde
Subject: Re: shell
Le 15/10/2011 16:21, Vincent Riquer a écrit :
> Le 11/10/2011 17:02, Patrick Dupre a écrit :
>> Question pratique en shell (bash).
>> Si je fais ls et que je recupere un seul nom de fichier
>
> Quelque soit le nombre de fichiers, pourquoi utiliser ls ? Une
> construction for fichier in * ; do … ; done marche *aussi* avec un seul
> fichier, et ça a beaucoup moins de chance de te péter à la gueule.
>
> Il y a plein d'autre solutions mais toutes celles construites avec ls
> risque de partir en feu d'artifice.


Ce n'est pas le cas ici avec un seul fichier, mais attention tout de
même à l'usage systématique du "for fichier in *; do … ; done".

Je l'utilisais souvent jusqu'à un jour où un répertoire contenait
beaucoup de fichiers à nom long et faisait exploser le for ! (1)


Un collègue de l'époque m'a alors indiqué une solution, qui marche et
que j'ai gardée depuis, pour traiter une liste de *fichiers* d'une
arborescence (pas les liens, pas les répertoires…).
La voici:
find . -type f -print | while read fichier ; do … ; done



On peut bien sûr adapter à ses besoins en ajoutant un "grep … |" avant
le while et/ou en changeant le find pour ne lister que le répertoire
courant, etc.
Ne pas oublier, comme indiqué par ailleurs, les guillemets doubles pour
traiter la variable utilisée: "$fichier".



(1) Je n'ai plus le message d'erreur en tête, mais − de mémoire −
c'était parce que "*" renvoyait trop de caractères et ne pouvait pas
être traité !

@+
Fernando
PS: Big Up à Grégoire s'il lit ces lignes :-)