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 19/08/2010, à 03:10

Hizoka

[resolu] récupération d'adresse pour faire un du commun

Bonsoir,

voila mon probleme :

j'ai un fichier comme :

dts : /home/hizoka/Download/mkv_extractor_gui/2_Audio_French DTS_fre.dts
piste : "/home/hizoka/Download/mkv_extractor_gui/2_Audio_French DTS_fre.ac3"
dts : /home/hizoka/Download/mkv_extractor_gui/3_Audio_Inconnu_fre.dts
piste : "/home/hizoka/Download/mkv_extractor_gui/3_Audio_Inconnu_fre.ac3"

j'arrive à récupérer les adresses commençant par piste et à les rassembler :

fichiers=$(sed -n '/piste : / s/piste : //p' /tmp/fichiers.txt)
fichiers=${fichiers}

mais le problème quand je fais un :

du "${fichiers}"
du: impossible d'accéder à « "/home/hizoka/Download/mkv_extractor_gui/2_Audio_French DTS_fre.ac3" "/home/hizoka/Download/mkv_extractor_gui/3_Audio_Inconnu_fre.ac3"»: Aucun fichier ou dossier de ce type
0       total

de même avec :

du ${fichiers}
du: impossible d'accéder à «"/home/hizoka/Download/mkv_extractor_gui/2_Audio_French»: Aucun fichier ou dossier de ce type
du: impossible d'accéder à «DTS_fre.ac3"»: Aucun fichier ou dossier de ce type
du: impossible d'accéder à «"/home/hizoka/Download/mkv_extractor_gui/3_Audio_Inconnu_fre.ac3"»: Aucun fichier ou dossier de ce type

y a-t-il moyen de récupérer les différentes adresses et de les traiter ?

merci de votre aide smile

Dernière modification par Hizoka (Le 21/08/2010, à 18:04)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#2 Le 19/08/2010, à 06:46

Totor

Re : [resolu] récupération d'adresse pour faire un du commun

je ne te donne pas le code car je pense que tu es à même de pouvoir le générer. je te donne juste ce qui ne va pas : ta variable "fichiers" encadre les noms de fichiers par des ". de ce fait, l'instruction du considère qu'ils font partie intégrante du nom.

c'est comme si tu avais : fichiers='"/home/hizoka/Download/mkv_extractor_gui/2_Audio_French DTS_fre.ac3"'

du coup l'instruction du essaie de cherche le fichier "/home/hizoka/Download/mkv_extractor_gui/2_Audio_French DTS_fre.ac3" et non /home/hizoka/Download/mkv_extractor_gui/2_Audio_French DTS_fre.ac3


-- Lucid Lynx --

Hors ligne

#3 Le 19/08/2010, à 15:24

Hizoka

Re : [resolu] récupération d'adresse pour faire un du commun

pour etre honnete, j'ai deja testé avec :

dts : /home/hizoka/Download/mkv_extractor_gui/2_Audio_French DTS_fre.dts
piste : /home/hizoka/Download/mkv_extractor_gui/2_Audio_French DTS_fre.ac3
dts : /home/hizoka/Download/mkv_extractor_gui/3_Audio_Inconnu_fre.dts
piste : /home/hizoka/Download/mkv_extractor_gui/3_Audio_Inconnu_fre.ac3

et il n'y a pas de changement, cela fonctionne pour 3_Audio_Inconnu_fre.ac3 car l'adresse ne contient pas d'espace mais impossible d'y arriver pour 2_Audio_French DTS_fre.ac3.

Avant de poster j'ai tester pas mal de truc...


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#4 Le 19/08/2010, à 16:37

Postmortem

Re : [resolu] récupération d'adresse pour faire un du commun

Juste une petite proposition mais je ne suis pas sûr du tout, tente ton du avec eval devant :

eval du ${fichiers}

ou

eval du "${fichiers}"

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#5 Le 19/08/2010, à 16:51

Postmortem

Re : [resolu] récupération d'adresse pour faire un du commun

Je viens d'essayer et ça marche pas en fait.
P...... d'espaces !!!!


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#6 Le 19/08/2010, à 16:57

Hizoka

Re : [resolu] récupération d'adresse pour faire un du commun

ca me parait etrange que ce soit si compliqué juste pour foutre des adresses à la suite...

j'ai tenté avec un while read line qui ajouterait chaque adresse dans une variable mais toujours le même probleme...


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#7 Le 19/08/2010, à 17:28

Postmortem

Re : [resolu] récupération d'adresse pour faire un du commun

test.txt :

dts : /users/login/xxxxxxx/test/2_Audio_French DTS_fre.dts
piste : /users/login/xxxxxxx/test/2_Audio_French DTS_fre.ac3
dts : /users/login/xxxxxxx/test/3_Audio_Inconnu_fre.dts
piste : /users/login/xxxxxxx/test/3_Audio_Inconnu_fre.ac3

while read line
do
[[ "$line" =~ "^piste :" ]] && fichier=$(sed -n '/piste : / s/piste : //p' <<< $line) && du -s "$fichier"
done < test.txt

8       /users/login/xxxxxxx/test/2_Audio_French DTS_fre.ac3
8       /users/login/xxxxxxx/test/3_Audio_Inconnu_fre.ac3

EDIT :
Et si le fichier contenant les noms de piste est de cette forme :

dts : "/users/login/xxxxxxx/test/2_Audio_French DTS_fre.dts"
piste : "/users/login/xxxxxxx/test/2_Audio_French DTS_fre.ac3"
dts : "/users/login/xxxxxxx/test/3_Audio_Inconnu_fre.dts"
piste : "/users/login/xxxxxxx/test/3_Audio_Inconnu_fre.ac3"

Alors :

while read line
do
[[ "$line" =~ "^piste :" ]] && fichier=$(sed -n '/piste : / s/piste : //p' <<< $line) && eval du -s $fichier
done < test.txt

Dernière modification par Postmortem (Le 19/08/2010, à 17:33)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#8 Le 19/08/2010, à 17:51

Hizoka

Re : [resolu] récupération d'adresse pour faire un du commun

oui bien sur que ca je sais faire smile

d'ailleur le

[[ "$line" =~ "^piste :" ]]

est inutile si tu fais :

sed -n '/piste : /

le but était de faire un "du -c" des fichiers afin d'avoir le total de leur taille.

il est évidant que je peux faire comme tu le propose et d'ajouter les tailles mais ca fait beaucoup de choses alors que du le fait de base...


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#9 Le 19/08/2010, à 18:03

Watael

Re : [resolu] récupération d'adresse pour faire un du commun

while read line
do
   [[ $line == [Pp]iste* ]] && array[n++]="${line#* : }"
done < Hizoka.in
du -c "${array[@]}"

ça le fait ?


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#10 Le 19/08/2010, à 19:40

Totor

Re : [resolu] récupération d'adresse pour faire un du commun

il n'est pas utile de gérer un indice : array+= ( "${line#* : }" ) fonctionne tout aussi bien.

sinon, dans le même principe :

unset array
while IFS=" : " read fType fName
do
  [[ "${fType}" = piste ]] && array+=( "${fName}" )
done < fichier
du -c "${array[@]}"

# ou encore
unset array
while read fType foo fName
do
  [[ "${fType}" = piste ]] && array+=( "${fName}" )
done < fichier
du -c "${array[@]}"

Dernière modification par Totor (Le 19/08/2010, à 19:44)


-- Lucid Lynx --

Hors ligne

#11 Le 20/08/2010, à 01:04

Hizoka

Re : [resolu] récupération d'adresse pour faire un du commun

ça marche nickel Totor...  t'es trop balèze...

peux tu expliquer s'il te plait ?


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#12 Le 20/08/2010, à 08:35

Totor

Re : [resolu] récupération d'adresse pour faire un du commun

ben il n'y a rien de nouveau ! si ?
1. peut être le fait de spécifier plusieurs variables pour l'instruction read ?
si c'est le cas : read peut renseigner plusieurs variables. pour ce faire, elle décompose la ligne lue en mots. 2 mots étant séparés par les caractères de l'IFS. si il y a plus de mots que de variables, la dernière variable est valorisée par la totalité de la ligne restante non décomposée. si il y a moins de mots que de variables, les variables restantes sont "vidées".

ex :

# cas 1
$ IFS=':-' read v1 v2 < <(echo "a:b-c")
$ printf "%s\n" $v1 $v2
a
b-c

# cas 2
$ v4=1;IFS=':-' read v1 v2 v3 v4 < <(echo "a:b-c")
$ printf "%s\n" $v1 $v2 $v3 $v4
a
b
c

2. la notation variable+= ( valeur )
on rajoute simplement valeur comme dernier élément au tableau variable

edit : < <(echo "a:b-c") peut bien sur être remplacé par <<< "a:b-c" (notation non acceptée par la version de bash que j'utilise au taf)

Dernière modification par Totor (Le 20/08/2010, à 08:37)


-- Lucid Lynx --

Hors ligne

#13 Le 20/08/2010, à 08:52

credenhill

Re : [resolu] récupération d'adresse pour faire un du commun

hello
j'ai 2 fichiers, a et "aa bb", si je fais

$ b=(a "aa bb")
$ du "${b[@]}"
4	a
16	aa bb
$ 
$ echo "${b[@]}"
a aa bb
$ echo ${b[@]}
a aa bb
$ echo "${b[1]}"
aa bb
$ echo ${b[1]}
aa bb
$ 
$ ls -s  "${b[@]}"
 4 a  16 aa bb
$

il n'y a apparement aucun " dans le tableau pour 'aa bb', or les commandes fonctionnent avec ${b[@]}, pourquoi ?

Hors ligne

#14 Le 20/08/2010, à 09:17

Totor

Re : [resolu] récupération d'adresse pour faire un du commun

Salut,
D'après ce que tu me décris, le nom du fichier aa bb ne contient pas de guillemets.

Les instructions utilisées avec ${b[@]} sont :
1. echo "${b[@]}"
2. echo ${b[@]}
3. du "${b[@]}"
4. ls -s  "${b[@]}"

l'instruction echo affiche ce qu'on lui demande :
donc echo "${b[@]}" et echo ${b[@]}, après expansion, se traduisent ainsi : echo "a" "aa bb" et echo a aa bb
Il n'y a donc pas de problème puisqu'il n'y a pas de recherche du dit fichier (juste un affichage des paramètres reçus).

En revanche :
du "${b[@]}" et ls -s "${b[@]}" se traduisent ainsi : du "a" "aa bb" et ls -s "a" "aa bb".
Cela ne pose donc pas de problème puisque les guillemets protègent l'espace entre aa et bb. Les instructions du et ls reçoivent donc 2 noms de fichiers : a et aa bb

Cependant, si tu avais utilisé du ${b[@]} et ls -s ${b[@]}, l'expansion aurait donné : du a aa bb et ls -s a aa bb et du coup les instructions du et ls reçoivent 3 noms de fichiers : a, aa et  bb. Si les fichiers aa et bb n'existent pas, les instructions ne les auraient pas trouvé dans la FAT et auraient généré des erreurs.

J'espère avoir répondu à ton intérogation.


-- Lucid Lynx --

Hors ligne

#15 Le 20/08/2010, à 17:13

Hizoka

Re : [resolu] récupération d'adresse pour faire un du commun

merci et pour :

while read fType foo fName

que represente le foo ?
comment sait-il qu'il faut couper apres " : " ?

sinon, en effet c'etait les variable dans le read que je ne connaissais pas.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#16 Le 20/08/2010, à 18:03

Totor

Re : [resolu] récupération d'adresse pour faire un du commun

foo est le nom d'une variable
ta ligne étant composée comme ceci : piste : /home/hizoka/Download/mkv_extractor_gui/2_Audio_French DTS_fre.ac3

sans modification de l'IFS (composée par défaut des caractères <espace><tabulation<nouvelle ligne>), l'instruction read la décompose en 3 mots :
fType valorisée avec le mot "piste"
foo valorisée avec le mot ":"
fName valorisée avec le mot "/home/hizoka/Download/mkv_extractor_gui/2_Audio_French DTS_fre.ac3"

Dernière modification par Totor (Le 20/08/2010, à 18:05)


-- Lucid Lynx --

Hors ligne

#17 Le 20/08/2010, à 18:21

Hizoka

Re : [resolu] récupération d'adresse pour faire un du commun

ok smile

merci beaucoup pour ton partage de savoir !


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne