Re: [gull] Question bash noms longs

2011-05-01 Par sujet Yves Martin
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

Re: [gull] Question bash noms longs

2011-04-25 Par sujet sneaky56
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 
{} \;


tom
-- 
GMX DSL Doppel-Flat ab 19,99 Euro/mtl.! Jetzt mit 
gratis Handy-Flat! http://portal.gmx.net/de/go/dsl
___
gull mailing list
gull@forum.linux-gull.ch
http://forum.linux-gull.ch/mailman/listinfo/gull

Re: [gull] Question bash noms longs

2011-04-25 Par sujet Laurent Franceschetti
Merci beaucoup, cela m'a dépanné!

Comme j'avais un pattern qui contenait un path, j'ai utilisé l'option -
wholename.

Find est décidément une belle trouvaille.

Bonne soirée,
Laurent

 -Message d'origine-
 De : gull-boun...@forum.linux-gull.ch [mailto:gull-bounces@forum.linux-
 gull.ch] De la part de sneak...@gmx.net
 Envoyé : lundi, 25. avril 2011 21:29
 À : Gull, liste de discussion
 Objet : Re: [gull] Question bash noms longs
 
 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 {} \;
 
 

___
gull mailing list
gull@forum.linux-gull.ch
http://forum.linux-gull.ch/mailman/listinfo/gull