J'ai le script ci dessous, qui, quand je l'execute, me renvoie les
erreurs:
ERROR: Failed to open input file: No such file or directory
ERROR: Cannot open input file " --downmix --resample 5512 -q 1 -o /home/mihamina/little/kar3/aina_pazzapa/aina_pazzapa_never_change.ogg - ": No such file or directory
ERROR: Cannot open input file " --downmix --resample 5512 -q 1 -o /home/mihamina/little/kar3/Aline_raelisoa/125_aline_raelisoa.ogg - ": No such file or directory
Le problème c'est que j'ai l'affectation de variable :
et le shell tente d'executer la chaine de caractère, en remplaçant
NEWNAME par le path du fichier.
le vrai problème c'est qu'il tente d'éxécuter ce qu'il y a entre
guillemets. Pourquoi?
Voici le script
#!/bin/zsh
BASEP=${HOME}/music/
TARGETP=${HOME}/little/
mkdir -pv $TARGETP
ENCODER=oggenc
DECODER=oggdec
DECODER_OPTIONS=" -o - "
for FICHIER in ${BASEP}**/*.ogg(.ND); do
{
cd $FICHIER:h
NEWNAME=`print $FICHIER | sed 's/music/little/g'`
mkdir -pv $NEWNAME:h
ENCODER_OPTIONS=" --downmix --resample 5512 -q 1 -o ${NEWNAME} - "
$DECODER $DECODER_OPTIONS | $ENCODER $ENCODER_OPTIONS
}
--
Les serveurs avec 10Mb/s se louent maintenant pour 50 ou 60 Euros par mois!
La preuve http://www.google.fr/search?q=serveur+dedie
Infogerance de serveur dedie http://aspo.rktmb.org/activites/infogerance
(En louant les services de l'ASPO vous luttez contre la fracture numerique)
C'est contradictioire, on ne peut pas stocker des noms de fichier dans une variable scalaire et demander plus tard de découper cette variable.
Avec zsh, si, on peut, justement.
On peut quoi ? Si le fichier s'appele "foo bar" et tu fais
options="--titi ${fichier}" [...]
Vu qu'il y a un "s" a "options", une variable scalaire ne convient pas evidemment, il faut une liste.
options=(--titi "$fichier") cmd "$options[@]"
Sinon:
options_shell_code='--titi "$fichier"'
eval "cmd $options_shell_code"
Sinon, find | read
ne convient pas puisqu'on ne peut pas recuperer les fichiers de maniere sure une fois qu'ils ont ete concatenés par find (a moins d'utiliser -print0 mais alors, il faut... zsh qui est le seul shell a savoir manipuler le caractere NUL)
Ou alors, il faut faire
NL=' ' find .//. -type f -print | { IFS= read -r file while [ -n "$file" ]; do while IFS= read -r more; do case $more in *//*) break;; esac file=$file$NL$more done file=${file#.//} do-something-with "$file" file=$more done }
Ce qui n'est pas exactement "trivial", en tous cas moins que:
for file (./**/*(.ND)) do-some-thing-with "$file"
(qui a par contre l'inconvenient d'etre potentiellement gourmant en resource, car il contruit et trie et stocke la liste complete en memoire avant de la processer)
Enfin, ne pas oublier
find . -type f -exec do-something-with '{}' ;
-- Stéphane
2005-04-6, 16:48(+00), Laurent Wacrenier:
Nicolas George <nicolas$george@salle-s.org> écrit:
Laurent Wacrenier wrote in message
<slrnd5831j.12t.lwa@victor.teaser.fr>:
C'est contradictioire, on ne peut pas stocker des noms de fichier dans
une variable scalaire et demander plus tard de découper cette
variable.
Avec zsh, si, on peut, justement.
On peut quoi ?
Si le fichier s'appele "foo bar" et tu fais
options="--titi ${fichier}"
[...]
Vu qu'il y a un "s" a "options", une variable scalaire ne
convient pas evidemment, il faut une liste.
options=(--titi "$fichier")
cmd "$options[@]"
Sinon:
options_shell_code='--titi "$fichier"'
eval "cmd $options_shell_code"
Sinon,
find | read
ne convient pas puisqu'on ne peut pas recuperer les fichiers de
maniere sure une fois qu'ils ont ete concatenés par find (a
moins d'utiliser -print0 mais alors, il faut... zsh qui est le
seul shell a savoir manipuler le caractere NUL)
Ou alors, il faut faire
NL='
'
find .//. -type f -print | {
IFS= read -r file
while [ -n "$file" ]; do
while IFS= read -r more; do
case $more in
*//*) break;;
esac
file=$file$NL$more
done
file=${file#.//}
do-something-with "$file"
file=$more
done
}
Ce qui n'est pas exactement "trivial", en tous cas moins que:
for file (./**/*(.ND)) do-some-thing-with "$file"
(qui a par contre l'inconvenient d'etre potentiellement gourmant
en resource, car il contruit et trie et stocke la liste complete
en memoire avant de la processer)
C'est contradictioire, on ne peut pas stocker des noms de fichier dans une variable scalaire et demander plus tard de découper cette variable.
Avec zsh, si, on peut, justement.
On peut quoi ? Si le fichier s'appele "foo bar" et tu fais
options="--titi ${fichier}" [...]
Vu qu'il y a un "s" a "options", une variable scalaire ne convient pas evidemment, il faut une liste.
options=(--titi "$fichier") cmd "$options[@]"
Sinon:
options_shell_code='--titi "$fichier"'
eval "cmd $options_shell_code"
Sinon, find | read
ne convient pas puisqu'on ne peut pas recuperer les fichiers de maniere sure une fois qu'ils ont ete concatenés par find (a moins d'utiliser -print0 mais alors, il faut... zsh qui est le seul shell a savoir manipuler le caractere NUL)
Ou alors, il faut faire
NL=' ' find .//. -type f -print | { IFS= read -r file while [ -n "$file" ]; do while IFS= read -r more; do case $more in *//*) break;; esac file=$file$NL$more done file=${file#.//} do-something-with "$file" file=$more done }
Ce qui n'est pas exactement "trivial", en tous cas moins que:
for file (./**/*(.ND)) do-some-thing-with "$file"
(qui a par contre l'inconvenient d'etre potentiellement gourmant en resource, car il contruit et trie et stocke la liste complete en memoire avant de la processer)
Enfin, ne pas oublier
find . -type f -exec do-something-with '{}' ;
-- Stéphane
Stephane Chazelas
2005-04-6, 22:37(+01), Stephane Chazelas:
2005-04-6, 16:48(+00), Laurent Wacrenier:
Nicolas George <nicolas$ écrit:
Laurent Wacrenier wrote in message :
C'est contradictioire, on ne peut pas stocker des noms de fichier dans une variable scalaire et demander plus tard de découper cette variable.
Avec zsh, si, on peut, justement.
On peut quoi ? Si le fichier s'appele "foo bar" et tu fais
options="--titi ${fichier}" [...]
Vu qu'il y a un "s" a "options", une variable scalaire ne convient pas evidemment, il faut une liste. [...]