Bash / lister fichiers avec espaces
Résolu/Fermé
A voir également:
- Bash boucle for liste fichier
- Liste déroulante excel - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
3 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
7 déc. 2010 à 17:32
7 déc. 2010 à 17:32
Salut,
Voir dans la FAQ : Comment lire un fichier ligne par ligne ;-))
Voir dans la FAQ : Comment lire un fichier ligne par ligne ;-))
Bonjour,
Effectivement à l'aide du tutoriel j'arrive maintenant à avoir le nom de dossier correctement dans ma boucle, par contre, cela ne règle pas le problème des espaces dans le nom de dossier, car même si je mets des \ devant les espaces dans mon fichier.txt, lorsque j'affiche le nom de dossier ils disparaissent...
Je vais procéder avec un sed, du genre:
Si quelqu'un à plus propre, je suis preneur.
Merci
J'ai trouvé, un peu plus loin dans le même tutoriel, dsl...
Voici la boucle finale pour ceux qui aurait le même problème:
fichier.txt:
Ce qui me donne bien :
cp -r Documents\ and\ Settings /new_path/Documents\ and\ Settings
cp -r Program\ Files /new_path/Program\ Files
cp -r linux /new_path/linux
Merci pour votre aide.
A+
Le Duc
Effectivement à l'aide du tutoriel j'arrive maintenant à avoir le nom de dossier correctement dans ma boucle, par contre, cela ne règle pas le problème des espaces dans le nom de dossier, car même si je mets des \ devant les espaces dans mon fichier.txt, lorsque j'affiche le nom de dossier ils disparaissent...
Je vais procéder avec un sed, du genre:
while read dir do dir_name='echo $dir | sed 's/\ /\\\ /g'' echo $dir_name done < fichier.txt
Si quelqu'un à plus propre, je suis preneur.
Merci
J'ai trouvé, un peu plus loin dans le même tutoriel, dsl...
Voici la boucle finale pour ceux qui aurait le même problème:
fichier.txt:
Documents\ and\ Settings Program\ Files linux
old_IFS=$IFS # sauvegarde du séparateur de champ IFS=$'\n' # nouveau séparateur de champ, le caractère fin de ligne for dir in $(cat fichier.txt) do echo "cp -r $dir /new_path/$dir" done IFS=$old_IFS # rétablissement du séparateur de champ par défaut
Ce qui me donne bien :
cp -r Documents\ and\ Settings /new_path/Documents\ and\ Settings
cp -r Program\ Files /new_path/Program\ Files
cp -r linux /new_path/linux
Merci pour votre aide.
A+
Le Duc
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
8 déc. 2010 à 11:20
8 déc. 2010 à 11:20
J'ai du mal à comprendre ton problème ;-\
Voilà ce que donne chez moi une boucle sur une liste de fichier avec des espaces et l'affichage de leur nom :
Où est ton problème ???
Voilà ce que donne chez moi une boucle sur une liste de fichier avec des espaces et l'affichage de leur nom :
$ ls Celui de tout le monde/ fich Le dossier de tata/ Le tien/ Mon dossier/ toto/ $ cat fich Celui de tout le monde Le dossier de tata Le tien Mon dossier toto $ while read line; do echo $line; done < fich Celui de tout le monde Le dossier de tata Le tien Mon dossier toto $
Où est ton problème ???
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
8 déc. 2010 à 11:26
8 déc. 2010 à 11:26
Avec une boucle "for" au cas ou...
$ OIFS=$IFS;IFS=$'\n';for line in $(cat fich); do echo $line; done;IFS=$OIFS Celui de tout le monde Le dossier de tata Le tien Mon dossier toto $
En fait il n'y a plus de problèmes, grace à ton lien vers le tutoriel j'avais trouvé ma réponse.
Je l'ai posté juste pour permettre à tout le monde d'en profiter.
Je renouvel donc mon merci pour ton aide.
Sinon, histoire de m'expliquer, mon problème avec le code que tu affiches, c'est que j'utilise le nom de dossier pour lancer une commande.
si tu fais un cp sur : "le dossier de tata", tu risques de ne pas avoir le résultat voulu.
Si l'on met des \ devant " " dans le fichier.txt, ils n'apparaissent pas lorque l'on se trouve dans la boucle while. Par contre ont les retrouve bien si l'on fait un for avec le changement de séparateur (comme tu le montres dans ton exemple)
Donc tout est ok.
Tu peux tager le POST en résolu.
Encore merci pour ton aide.
Le Duc
Je l'ai posté juste pour permettre à tout le monde d'en profiter.
Je renouvel donc mon merci pour ton aide.
Sinon, histoire de m'expliquer, mon problème avec le code que tu affiches, c'est que j'utilise le nom de dossier pour lancer une commande.
si tu fais un cp sur : "le dossier de tata", tu risques de ne pas avoir le résultat voulu.
Si l'on met des \ devant " " dans le fichier.txt, ils n'apparaissent pas lorque l'on se trouve dans la boucle while. Par contre ont les retrouve bien si l'on fait un for avec le changement de séparateur (comme tu le montres dans ton exemple)
Donc tout est ok.
Tu peux tager le POST en résolu.
Encore merci pour ton aide.
Le Duc
7 déc. 2010 à 18:18
Je test demain et je te dit "QUOI" ;-)
Le Duc