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

Re: bash et les expaces dans les noms de fichiers



Le Tue, 12 Feb 2013 19:01:44 +0100,
Philippe Delavalade <philippe.delavalade@orange.fr> a écrit :

> Bonjour.
> 
> J'ai un ré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.
> 
bonjour,

	pourquoi ne pas employer "détox" pour lier les espaces ?

	apt-cache search detox
	detox - utility to replace problematic characters in filenames

	http://linux.die.net/man/1/detox

	slt
	bernard


Reply to: