Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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" smile

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 smile

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