Bjr,
Ce script[code]#!/bin/bash
for file in ls -R *.flv
do
echo “conversion de $file”
ffmpeg -i $file ${file%.flv}.avi
done[/code]
me renvoie cette erreur$file: no such file or directory
ça vient d’où ?
Bjr,
Ce script[code]#!/bin/bash
for file in ls -R *.flv
do
echo “conversion de $file”
ffmpeg -i $file ${file%.flv}.avi
done[/code]
me renvoie cette erreur$file: no such file or directory
ça vient d’où ?
mauvaise section, je bascule dans la programmation.
Bonjour,
Ta commande ls ne sera pas recursive comme tu souhaites le faire. Elle affichera que les fichiers *.flv présent dans le repertoire ou tu te trouve lors du lancement. Ensuite si tes noms de fichiers ont des espaces, cela posera problème à for.
A la place du ls, je mettrais un ‘find /repertoire/ou/chercher/ -iname “*.flv”’
Deux solutions pour la boucle :
Utilisation de for avec modification de IFS :
Modification du IFS pour que for n'interprete pas l'espace comme séparateur
IFS=$'\t\n'
for file in $(find /repertoire/ou/chercher/ -iname "*.flv")
do
...
Sans modification de IFS :
find /repertoire/ou/chercher/ -iname "*.flv" | while read file
do
...
Bjr,
J’aurais dû préciser, mais le script est mis dans le rep concerné. Donc la première ligne renvoie bien les *.flv. C’est donc , je pense, dans le traitement suivant que ça déconne.
Bonjour,
Tes noms de fichiers contiennent des espaces ?
@phlinux :
#!/bin/bash
ls *.flv | while read file
do
echo "conversion de : ${file}"
ffmpeg -i "$file".flv "${file}".avi
done
Ce script te permet de faire ce que tu voulais. Ton erreur vient sans doute du fait que tu dois mettre file entre guillement pour spécifier que les espaces ne sont pas des séparateurs de fichiers, exemple quand tu as : le chat bleu.flv, tu n’obtiendras pas plusieurs fichiers.
En espérant que ça réponde à ta question.
Doby
Re-
@ micky979 : non pas d’espace, les fichiers ont cette forme > 1.flv
@ Doby : merci, Je pensais que c’était ok, mais maintenant j’ai ces erreurs
essai avec un fichier 1.flv
1.flv.flv: no such file or directory
essai avec 2 fichiers 1.flv et 2.flv
1.flv.flv: no such file or directory 2.flv.flv: no such file or directory
Par contre ça c’est bon, ça affiche bienconversion de : 2.flv
[code]#!/bin/bash
ls *.flv | while read file
do
echo "conversion de : ${file}"
ffmpeg -i “$file” "basename ${file} .flv
.avi"
done[/code]
@ Phlinux :
Ouais normal dans la ligne de commande de ffmpeg il y a file + .flv a la fin. En fait ce que tu veux c’est le nom sans l’extension, à savoir :
name=basename "${file}" .flv
Le code devient donc :
#!/bin/bash
ls *.flv | while read file
do
echo "conversion de : ${file}"
name=`basename "${file}" .flv`
ffmpeg -i "${name}".flv "${name}".avi
done
Bon fran.b a été plus rapide que moi
Re-
Bon ça avance, c’est ok mais le script s’arrête après le premier fichier
rahlala
for file in *.flv; do
ffmpeg blah ${file}
done
(si tu veux récursif tu fais */**.flv)
A+
Ça marche avec bash 4 ou zsh mais sous lenny par exemple le bash ne l’accepteras pas par exemple.
Tu peut par contre faire comme ça :
oué mais un script ça se fait dans un vrai shell !
Je suis d’accord (bien que find offre l’avantage de pouvoir mettre des conditions plus sophistiquées sur les fichiers).
re-
Bon ça fonctionne plus du tout.
Tant pis, je les ferai un par un.
Merci à tous
@+
[quote=“phlinux”]re-
Bon ça fonctionne plus du tout.
Tant pis, je les ferai un par un.
Merci à tous
@+[/quote]
for file in `find . -name *.flv` ; do
echo "conversion de : ${file}"
ffmpeg -i "$file" "`basename ${file} .flv`.avi"
done
re-
François merci d’avoir persévéré.
Il subsistait une toute petite erreur renvoyée par find. Vous comprendrez en lisantfor file in `find . -name "*.flv"` ; do
echo "conversion de : ${file}"
ffmpeg -i "$file" "`basename ${file} .flv`.avi"
done
Encore merci à tous
Pourquoi passer par une boucle quand find peut tout faire lui même ?
Il doit même y avoir moyen de faire ça :