On Mon, 2011-04-25 at 21:28 +0200, sneak...@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 _______________________________________________ gull mailing list gull@forum.linux-gull.ch http://forum.linux-gull.ch/mailman/listinfo/gull