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 08/05/2007, à 01: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, à 16: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, à 17: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, à 11: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, à 08: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, à 15:56

toto4455

Re : [Résolu] zenity remplir liste à partir fichier txt

c'est pas tres joli mais cela dois marcher smile
(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, à 22: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 cool

Merci Toto4455 et aux autre de s'être penché sur mon problème, j'en suis smile

Je vais tacher d'étudier le code et de le commenter

bye bye a+

Néo

#8 Le 11/05/2007, à 01: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, à 10: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.