[gull] Question bash noms longs
Yves Martin
ymartin59 at free.fr
Mon May 2 00:03:43 CEST 2011
On Mon, 2011-04-25 at 21:28 +0200, sneaky56 at gmx.net wrote:
> Bonjour,
>
> > Le morceau de code suivant liste et détruit des fichiers:
> >
> > for file in ${filelist}
> > do
> > echo "Deleting $file"
> > rm "$file"
> > done
> >
> > Mais le problème est qu'il ne traite pas les noms longs correctement.
> > Comment le modifier pour qu'il fonctionne?
>
> Cela dépend plutôt des caractères dans le nom (espace, tab, retour à la ligne) que de la longueur du nom. Pour l'exemple en question je ferais plutôt la commande suivante:
>
> # find /DIRECTORY/ -type f -execdir /bin/echo "deleting {}" \; -execdir /bin/rm {} \;
Oui mais cette version présente encore des problèmes avec le "-" par
exemple.
L'origine du problème dans le script provient du découpage sur les
espaces fait par le "for in". Comment est construite ta "filelist" ?
http://tldp.org/LDP/abs/html/loops1.html
En général, la solution la plus efficace est d'utiliser le caractère
'0x00' comme séparateur, ce qui se fait simplement avec le couple
find/xargs:
find base -type f -print0 | xargs -0 rm -f
En shell, cela oblige à faire un script à appeler par xargs... Mais j'ai
déjà écrit du awk qui génère des commandes avec les doubles-quote que je
pipe ensuite dans Bash.
Sinon il faut utiliser un langage plus futé comme Perl.
--
Yves Martin
More information about the gull
mailing list