#1 Le 08/05/2007, à 00:13
- néovisio
[Résolu] zenity remplir liste à partir fichier txt
bonjour
je sais lire un fichier texte avec :
while read line
do echo -e "$line"
done <$/home/ListeFichierTxt
Je sais ouvrir une check liste avec zenity:
zenity --list --checklist --column "select" --column "fichiers" TRUE "/home/file1" TRUE "/home/file2" TRUE "/home/file3" TRUE "/home/file4"
Ce que je voudrai c'est remplir ma liste à partir de du fichier texte
Fichier texte:
/home/file1
/home/file2
/home/file3
....
/home/fileX
Neo
#2 Le 08/05/2007, à 15:19
- zac974
Re : [Résolu] zenity remplir liste à partir fichier txt
mhm ... lo po bien compris ...
si la question c comment remplir une liste à partir de ton fichier texte
en csh je ferais :
set liste=`cat fichier.txt`
si tu as plusieurs colonnes tu utilises awk :
set colone1=`cat fichier.txt | awk '{print $1}'`
set colone2=`cat fichier.txt | awk '{print $2}'`
etc...
#3 Le 08/05/2007, à 16:32
- qqun
Re : [Résolu] zenity remplir liste à partir fichier txt
un truc du style ?
#!/bin/bash
while read line
do
cmd=`echo $cmd "TRUE " \"$line\"`
done < ListeFichierTxt
cmd=`echo "zenity --list --checklist --column \"select\" --column \"fichiers\" " $cmd`
echo $cmd
#4 Le 09/05/2007, à 10:27
- néovisio
Re : [Résolu] zenity remplir liste à partir fichier txt
Oui qqun merci c'est exatement cela il faut juste enlever echo sur la dernière ligne
Donc j'ai un fichier toto.txt avec :
/home/file1
/home/file2
/home/file3
Mon bash script
#!/bin/bash
while read line
do
cmd=`echo $cmd "TRUE " \"$line\"`
done < /home/jovial/Desktop/toto.txt
cmd=`echo "zenity --list --checklist --title "Exporter les fichiers" --column \"select\" --column \"fichiers\" " $cmd`
par contre avec cela
/home/Pépé.mp3
/home/Ballade pour Izia.mp3
/home/La fille d'avril.mp3
Cela ne fonctionne mal à cause des espaces donc ma question maintenant c'est comment gérer les chaînes avec espaces
Et pendant que j'y suis et pour fournir un exemple complet de cette utilisation de Zenity je voudrai copier tous les fichiers sélectionnés vers /media/USB du genre
cp "$selection" /media/cle_USB
Bye
Néo
#5 Le 10/05/2007, à 07:38
- néovisio
Re : [Résolu] zenity remplir liste à partir fichier txt
j'en suis là et je coince avec mon débutantisme
#!/bin/bash
while read line
do
cmd=`echo $cmd "TRUE " \"$line\"`
done < /home/jovial/Desktop/toto.txt
diallist=`echo "zenity --list --checklist --title "Exporter" --column select --column fichiers" $cmd`
maselection=echo $diallist
echo $maselection
Cette dernière me retourne le résultat sous la forme "/home/file1"|"/home/file2"|"/home/file3"|"/home/file4"
si je fais : zenity --list --title "choix" --column "select" $maselection cela ne m'affiche rien
J'arrive pas à extraire les chaînes de ce résultat pour les traiter une par une dans une boucle
Litéralement je veux faire cela avec le résultat
pour chaque élement de ma sélection
cp élément home/rep_cible
help please
#6 Le 10/05/2007, à 14:56
- toto4455
Re : [Résolu] zenity remplir liste à partir fichier txt
c'est pas tres joli mais cela dois marcher
(avec les noms de fichier contenants des espaces aussi)
#!/bin/bash
FICSRC=/home/jovial/Desktop/toto.txt
FICOUT=./TmpFile.txt
DIRCIBLE=home/rep_cible
while read line
do
cmd="$cmd TRUE \"$line\" "
echo "$cmd" >$FICOUT
done < $FICSRC
cmd=`cat $FICOUT`
cmd="zenity --list --checklist --column select --column fichiers $cmd"
echo "#!/bin/bash" > $FICOUT
echo "$cmd" >> $FICOUT
chmod +x $FICOUT
cmd=`$FICOUT`
rm $FICOUT
cmd="$cmd|"
echo $cmd | while read -d '|' line
do
echo "Copie de \"$line\" dans $DIRCIBLE "
#cp "$line" $DIRCIBLE
done
#7 Le 10/05/2007, à 21:39
- néovisio
Re : [Résolu] zenity remplir liste à partir fichier txt
Bonjour
c'est pas tres joli mais cela dois marcher
(avec les noms de fichier contenants des espaces aussi)
Je suis pas à même d'en juger mais en tout cas cela marche joliment
Et c'est
Merci Toto4455 et aux autre de s'être penché sur mon problème, j'en suis
Je vais tacher d'étudier le code et de le commenter
bye bye a+
Néo
#8 Le 11/05/2007, à 00:50
- néovisio
Re : [Résolu] zenity remplir liste à partir fichier txt
J'ai fait une adaptation concrète du code
il s'agit d'une amélioration du script sur http://forum.ubuntu-fr.org/viewtopic.php?pid=914088#p914088
Le but étant de pouvoir copier les fichiers d'une liste multimédia crée par Rythmbox vers un média ou un repertoire de votre choix.
on choisi une liste *.m3u qui contient les chemins des mp3 ou ogg à exporter
via une boite dialogue zenity on peut paufiner la sélection
les fichiers sont copiés vers le répertoire choisi
le script
#!/bin/bash
# nécessite gnome - zenity - un lecteur mutimédiat créant des liste m3u par exemple rythmbox
#copie les fichiers d'une liste de lecture m3u vers un repertoire cible (exemple clé USB) - une boite de dialogue avec case à cocher permet d'enlever certains fichier avant l'export
#rythmbox permet d'exporter une liste de lecture au format m3u : clic droit sur votre liste -> enregistrez sous -> format de liste: MPEG V3 URL *.m3u
#copier ce script dans un éditeur (gedit) enregistrez le par exemple sous Copier_liste_m3u.sh
#"rendez le executable: clic droit sur le fichier > propriétés > onglet permission > cochez Autoriser l'execution...
#double cliquez sur le fichier puis sur lancer
# clear
#selectionne le fichier *.m3u contenant la liste mutimédiat
FICSRC=`zenity --file-selection --title="Choix liste fichiers .m3u à exporter" `
#selectionne le repertoire de destination des fichiers à copier - vous pouvez en créer un nouveau
DIRCIBLE=`zenity --file-selection --directory --title="Choix du répertoire cible" `
FICOUT=./TmpFile.txt
echo chemin liste m3u: $FICSRC
echo repertoire exportation: $DIRCIBLE
# lecture du fichier temporaire
while read line
do
#pour chaque ligne on ajoute True
cmd="$cmd TRUE \"$line\" "
#on ecrit dans un fichier temporaire
echo "$cmd" >$FICOUT
#echo "$cmd"
done < $FICSRC
#on concatene le fichier dans la variable
cmd=`cat $FICOUT`
# on lance la boite de dialogue zenity qui permet de desectionner certain fichier
cmd="zenity --list --checklist --title \" export des fichiers de la liste multimédiat $FICSRC\" --text \"Selectionner les fichiers à copier vers $DIRCIBLE\" --width 800 --height 600 --column copier --column fichiers $cmd"
# on cree un bash script temporaire pour l'affichage de la boite de dialogue
echo "#!/bin/bash" > $FICOUT
echo "$cmd" >> $FICOUT
# on le rend executable
chmod +x $FICOUT
#on l'execute
cmd=`$FICOUT`
# on efface le fichier temporaire
rm $FICOUT
# on traite le resultat en vue de la copie
cmd="$cmd|"
#echo $cmd
# on affiche le répertoire cible dans nautilus
nautilus $DIRCIBLE
# on lit chaque ligne de cmd qui contient les chemins des fichiers à copier
echo $cmd | while read -d '|' line
do
echo "Copie de \"$line\" dans $DIRCIBLE "
# on le fichier vers le le repertoire cible
cp "$line" $DIRCIBLE
done
Je l'ai commenté comme je l'ai compris
Il y une chose que je comprends pas c'est la fonction de "|" dans le code
que fait cmd="$cmd|" et echo $cmd | while read -d '|' line
#9 Le 11/05/2007, à 09:21
- toto4455
Re : [Résolu] zenity remplir liste à partir fichier txt
Il y une chose que je comprends pas c'est la fonction de "|" dans le code
que fait cmd="$cmd|" et echo $cmd | while read -d '|' line
cmd="$cmd|"
cela rajoute le un '|' a la fin de la variable cmd .
echo $cmd | while read -d '|' line
cela lis un par un tout les champs de la variable cmd et les affecte dans la variable line.
-d '|' car on utilise le '|' comme separateur de champs.
c'est pour ca qu'on rajoute un '|' avant a la fin de cmd . sinon il ne prend pas en compte le dernier champ.