#1 Le 04/12/2007, à 12:03
- Thibaud
[Résolu] [Bash] Lire une ligne et non un mot dans une boucle for
Bonjour,
J'ai besoin de lire une liste de fichiers, mais certains noms comportent des espaces.
Si je fais une boucle, j'obtiens des parties du nom tronqués au niveau des espaces.
Par exemple :
fichier_a_lire="Mes Documents\nMa musique"
for i in $(echo -e $fichier_a_lire)
do
echo $i
done
En sortie, j'obtiens :
Mes
Documents
Ma
musique
Alors que j'ai besoin de :
Mes Documents
Ma musique
Merci de l'aide pour un débutant,
Thibaud.
Dernière modification par Thibaud (Le 04/12/2007, à 15:04)
Bienvenue sur mon site perso : http://thibaud.hulin.free.fr/dokuwiki
Pour l'utilisabilité et l'ergonomie des logiciels libres : http://ergolibre.tuxfamily.org
Apprentissage libre des langues : http://polyglotte.tuxfamily.org et http://www.akademia.ch/websites/ergolang/
Hors ligne
#2 Le 04/12/2007, à 12:06
- Mikeforever
Re : [Résolu] [Bash] Lire une ligne et non un mot dans une boucle for
Pourquoi "echo -e" ???
Hors ligne
#3 Le 04/12/2007, à 12:18
- Thibaud
Re : [Résolu] [Bash] Lire une ligne et non un mot dans une boucle for
Ben pour que mon \n se transforme en retour chariot, comme mon vrai fichier.
Bienvenue sur mon site perso : http://thibaud.hulin.free.fr/dokuwiki
Pour l'utilisabilité et l'ergonomie des logiciels libres : http://ergolibre.tuxfamily.org
Apprentissage libre des langues : http://polyglotte.tuxfamily.org et http://www.akademia.ch/websites/ergolang/
Hors ligne
#4 Le 04/12/2007, à 13:20
- Gari
Re : [Résolu] [Bash] Lire une ligne et non un mot dans une boucle for
Que veux-tu faire avec ces noms de fichier ?
Il me semble qu'il est plus simple d'utiliser un utilitaire comme awk ou sed pour traiter les lignes une à une...
sinon pour remplacer "echo -e fichier" tu peux utiliser "cat fichier".
Dis nous ce que tu veux mettre concrêtement à la place de "echo $i"
Hors ligne
#5 Le 04/12/2007, à 13:54
- cduray
Re : [Résolu] [Bash] Lire une ligne et non un mot dans une boucle for
'lut
Un read serait plus approprié:
fichier_a_lire="Mes Documents\nMa musique"
echo -e $fichier_a_lire |while read i
do
echo $i
done
C
Hors ligne
#6 Le 04/12/2007, à 14:06
- Gari
Re : [Résolu] [Bash] Lire une ligne et non un mot dans une boucle for
hummm je note "read" dans mes tablettes... Merci cduray
Hors ligne
#7 Le 04/12/2007, à 15:03
- Thibaud
Re : [Résolu] [Bash] Lire une ligne et non un mot dans une boucle for
Merci pour le while read, c'est exactement ce que je cherchais !
En fait je cherche à synchroniser des fichiers entre deux postes et un disque externe de sauvegarde.
Première étape : grà¢ce à un find -mtime 33, j'ai listé les fichiers que j'ai créé sur un poste depuis un mois.
Seconde étape : les copier dans un dossier et les transférer vers mon portable.
J'ai failli avoir un manque de place sur le disque, mais c'est bon !
Voici le script en question :
#!/bin/bash
echo $liste >liste
cible=/home/toto/Desktop/recents
echo $(date) > $cible/recents.log
cat anciens_fichiers|grep -vF './.' |grep -v '/opt' | grep -v "^.$"|sed -e 's/\.\///g' | while read i
do
if [ -d "$i" ]
then
mkdir "$cible/$i"
echo "mkdir '$cible/$i'" >> $cible/recents.log
else
cp "$i" "$cible/$i"
echo "cp '$i' '$cible/$i'" >> $cible/recents.log
fi
done
Merci à tous,
Thibaud.
Dernière modification par Thibaud (Le 04/12/2007, à 15:04)
Bienvenue sur mon site perso : http://thibaud.hulin.free.fr/dokuwiki
Pour l'utilisabilité et l'ergonomie des logiciels libres : http://ergolibre.tuxfamily.org
Apprentissage libre des langues : http://polyglotte.tuxfamily.org et http://www.akademia.ch/websites/ergolang/
Hors ligne