#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
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
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.
Hors 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
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