[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: bash et les expaces dans les noms de fichiers



Bonsoir,
Il faut en effet modifier l'IFS (internal file separator) pour manipuler
les noms avec espaces.

#!/bin/sh
# Se souvenir de l'ancien IFS
OLDIFS=$IFS 
# Modification de l'IFS : retour à la ligne
IFS='
'

# quelques opérations
...
...

# On rétablit l'IFS
IFS=$OLDIFS

exit 0


Le 20:02:39 le 12 févr. 2013 , Sébastien MARQUE a écrit :
> Bonsoir,
> 
> L'origine de ton problème est l'IFS.
> 
> Tu peux essayer de faire IFS=$(echo -ne "\n\b"):
> 
> $ for i in foo bar baz; do mkdir "foo $i"; done
> 
> $ IFS=$(echo -en "\n\b")
> 
> $ for i in $(find . -mindepth 1 -type d); do echo $i; done
> ./foo baz
> ./foo bar
> ./foo foo
> 
> hope this helps.
> 
> Séb
> 
> Le 12/02/2013 19:01, Philippe Delavalade a écrit :
> >Bonjour.
> >
> >J'ai un pépertoire qui contient des sous-répertoires ; dans chacun de ces
> >derniers j'ai des fichiers sur lesquels je veux faire des opérations
> >(toujours les mêmes).
> >
> >J'ai donc envisagé un script du genre
> >
> >for dir in `find -mindetph 1 -type d`
> >do
> >   pushd "$dir"
> >   commande1
> >   ...
> >   commanden
> >   popd
> >done
> >
> >l'option -mindepth est là pour éviter les soucis avec ./
> >
> >Seulement ça ne marche pas car certains des sous-répertoires comporte une
> >espace (ou plusieurs) dans leur nom.
> >
> >J'ai créé à titre d'exemple, un répertoire machin dans lequel j'ai créé
> >cinq sous-répertoires.
> >
> >voici ce que ça donne
> >
> >philippe:~/machin$ for dir in `find -mindepth 1 -type d`
> >>do
> >>   echo "$dir"
> >>done
> >./blu
> >blu
> >blu
> >./ble
> >ble
> >ble
> >./bli
> >bli
> >bli
> >./bla
> >bla
> >bla
> >./blo
> >blo
> >blo
> >
> >En fait les noms sont « splités » et donc ça ne marche pas.
> >
> >Autre essai :
> >
> >philippe:~/machin$ for dir in "`find -mindepth 1 -type d`"
> >>do
> >>   echo "$dir"
> >>done
> >./blu blu blu
> >./ble ble ble
> >./bli bli bli
> >./bla bla bla
> >./blo blo blo
> >
> >Là ça paraît mieux, j'ai bien les cinq sous-répertoires mais :
> >
> >philippe:~/machin$ for dir in "`find -mindepth 1 -type d`"
> >>do
> >>   echo "$dir"
> >>   pushd "$dir"
> >>   echo "On est dans `pwd`"
> >>   popd
> >>done
> >./blu blu blu
> >./ble ble ble
> >./bli bli bli
> >./bla bla bla
> >./blo blo blo
> >bash: pushd: ./blu blu blu
> >./ble ble ble
> >./bli bli bli
> >./bla bla bla
> >./blo blo blo: Aucun fichier ou dossier de ce type
> >On est dans /home/philippe/machin
> >bash: popd: pile de répertoire vide
> >
> >Là ça se passe comme s'il n'y avait qu'un seul sous-répertoire dans machin
> >(une sorte de concaténation des cinq noms).
> >
> >J'ai, à tout hasard, essayé avec "${dir}" au lieu de "$dir" mais c'est la
> >même chose.
> >
> >J'ai cherché dans abs-guide mais je n'ai rien trouvé comme idée nouvelle.
> >
> >J'ai bien la possibilité de faire un
> >rename 's/ /#/g' *
> >mais c'est du bricolage...
> >
> >Quelqu'un aurait-il une suggestion plus académique ?
> >
> >Merci d'avance.
> >
> 
> -- 
> Lisez la FAQ de la liste avant de poser une question :
> http://wiki.debian.org/fr/FrenchLists
> 
> Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
> vers debian-user-french-REQUEST@lists.debian.org
> En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
> Archive: [🔎] 511A91CF.3010209@free.fr">http://lists.debian.org/[🔎] 511A91CF.3010209@free.fr
> 

-- 
 ,--.   Xavier Cartron        
: /` )  M2 MEFPC               
| `-'   Debian user             
 \_     jabber : thuban@jabber.fr


Reply to: