Erreur script

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.flv1.flv.flv: no such file or directory

essai avec 2 fichiers 1.flv et 2.flv1.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 :stuck_out_tongue:

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 :