Bonjour,
j’ai un problème avec le script suivant :
#!/bin/bash
for repertoire in `ls`
do
echo "$repertoire"
done
J’ai un nom de répertoire avec un espace dedans, et du coup, il me le traite comme 2 entrées différentes dans mon for … Comment je peux éviter ça ?
La preuve par l’exemple :
glorf@debian-desktop64-maman:~/code$ ls
Dof'Graph find_rangement.sh rangement.sh rangement.sh.save test lolilol test.sh
glorf@debian-desktop64-maman:~/code$ ./test.sh
Dof'Graph
find_rangement.sh
rangement.sh
rangement.sh.save
test
lolilol
test.sh
Cordialement,
Glorf
Ça serait pour ranger des répertoires, donc je peux pas tous les trouver à la main … Et puis, un espace dans un nom de répertoire, c’est pas si exotique que ça …
Question de principe, pour éviter ce genre de désagréments, moi, que ce soit fichier ou dossier, tout est exclusivement écrit en minuscules, sans accents et sans espacement, seulement des ‹ - › et des ‹ . › pour les extensions.
Question de principe, pour éviter ce genre de désagréments, moi, que ce soit fichier ou dossier, tout est exclusivement écrit en minuscules, sans accents et sans espacement, seulement des ‹ - › et des ‹ . › pour les extensions.[/quote]
C’est en fait des vieuux backups sur un DD, avec des fichiers dans un peu tous les sens, et j’aimerais les regrouper par extension, et donc je sais pas du tout à quel nom de répertoire je dois m’attendre. Et puis bon, des noms de fichiers avec des espaces, bash devrait pouvoir gérer ça !
+1 pour changer l’IFS. Je crois que c’est Misterfreez qui m’en avait parlé. C’est l’Internal File Separator. Sauf que utiliser export n’est peut-être pas le mieux?
Cool merci, je suis obligé de faire un if [ -d $repertoire ].
Par contre, est-ce que ya moyen d’enlever du */ un dossier précis ? (comme le ls -I donné plus haut)
shopt -s extglob
for repertoire in !(nom_dossier_non_souhaité)/
do
[...]
done
dans nom_dossier_non_souhaité, tu peux utiliser des glob également. Ex : !(dossier*tmp)/ traitera tous les dossiers sauf ceux dont le nom commence par dossier et qui se termine par tmp