# Erreur script

**URL:** <https://www.debian-fr.org/t/erreur-script/20065>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 7:31 UTC](https://www.debian-fr.org/t/erreur-script/20065 "2016-02-20T19:31:11Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![phlinux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/2acd7d/32.png) [@phlinux](https://www.debian-fr.org/u/phlinux)\
**Post date:** [Février 20, 2016, 7:31 UTC](https://www.debian-fr.org/t/erreur-script/20065/1 "2016-02-20T19:31:11Z")

</div>

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ù ?

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 20, 2016, 7:31 UTC](https://www.debian-fr.org/t/erreur-script/20065/2 "2016-02-20T19:31:11Z")

</div>

mauvaise section, je bascule dans la programmation.

---

<div class="post-metadata">

**Author:** ![micky979](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/d9b06d/32.png) [@micky979](https://www.debian-fr.org/u/micky979)\
**Post date:** [Février 20, 2016, 7:31 UTC](https://www.debian-fr.org/t/erreur-script/20065/3 "2016-02-20T19:31:12Z")

</div>

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
...`

---

<div class="post-metadata">

**Author:** ![phlinux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/2acd7d/32.png) [@phlinux](https://www.debian-fr.org/u/phlinux)\
**Post date:** [Février 20, 2016, 7:31 UTC](https://www.debian-fr.org/t/erreur-script/20065/4 "2016-02-20T19:31:15Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![micky979](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/d9b06d/32.png) [@micky979](https://www.debian-fr.org/u/micky979)\
**Post date:** [Février 20, 2016, 7:31 UTC](https://www.debian-fr.org/t/erreur-script/20065/5 "2016-02-20T19:31:15Z")

</div>

Bonjour,

Tes noms de fichiers contiennent des espaces ?

---

<div class="post-metadata">

**Author:** ![Doby](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@Doby](https://www.debian-fr.org/u/Doby)\
**Post date:** [Février 20, 2016, 7:31 UTC](https://www.debian-fr.org/t/erreur-script/20065/6 "2016-02-20T19:31:16Z")

</div>

@phlinux :

```auto
#!/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

---

<div class="post-metadata">

**Author:** ![phlinux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/2acd7d/32.png) [@phlinux](https://www.debian-fr.org/u/phlinux)\
**Post date:** [Février 20, 2016, 7:31 UTC](https://www.debian-fr.org/t/erreur-script/20065/7 "2016-02-20T19:31:25Z")

</div>

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 bien`conversion de : 2.flv`

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 7:31 UTC](https://www.debian-fr.org/t/erreur-script/20065/8 "2016-02-20T19:31:26Z")

</div>

[code]#!/bin/bash

ls \*.flv | while read file  
do  
echo "conversion de : ${file}"  
ffmpeg -i “$file” "`basename ${file} .flv`.avi"  
done[/code]

---

<div class="post-metadata">

**Author:** ![Doby](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/58f4c7/32.png) [@Doby](https://www.debian-fr.org/u/Doby)\
**Post date:** [Février 20, 2016, 7:31 UTC](https://www.debian-fr.org/t/erreur-script/20065/9 "2016-02-20T19:31:26Z")

</div>

@ 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 :

```auto
#!/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 😛

---

<div class="post-metadata">

**Author:** ![phlinux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/2acd7d/32.png) [@phlinux](https://www.debian-fr.org/u/phlinux)\
**Post date:** [Février 20, 2016, 7:31 UTC](https://www.debian-fr.org/t/erreur-script/20065/10 "2016-02-20T19:31:27Z")

</div>

Re-  
Bon ça avance, c’est ok mais le script s’arrête après le premier fichier

---

<div class="post-metadata">

**Author:** ![ed](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ed/32/5886_2.png) [@ed](https://www.debian-fr.org/u/ed)\
**Post date:** [Février 20, 2016, 7:31 UTC](https://www.debian-fr.org/t/erreur-script/20065/11 "2016-02-20T19:31:52Z")

</div>

rahlala

```auto
for file in *.flv; do
  ffmpeg blah ${file}
done
```

(si tu veux récursif tu fais \*/\*\*.flv)

A+

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 7:32 UTC](https://www.debian-fr.org/t/erreur-script/20065/12 "2016-02-20T19:32:01Z")

</div>

> [@](#):
>
> (si tu veux récursif tu fais \*/\*\*.flv)

Ç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 :

```auto

```

---

<div class="post-metadata">

**Author:** ![ed](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ed/32/5886_2.png) [@ed](https://www.debian-fr.org/u/ed)\
**Post date:** [Février 20, 2016, 7:32 UTC](https://www.debian-fr.org/t/erreur-script/20065/13 "2016-02-20T19:32:05Z")

</div>

oué mais un script ça se fait dans un vrai shell !

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 7:32 UTC](https://www.debian-fr.org/t/erreur-script/20065/14 "2016-02-20T19:32:12Z")

</div>

Je suis d’accord (bien que find offre l’avantage de pouvoir mettre des conditions plus sophistiquées sur les fichiers).

---

<div class="post-metadata">

**Author:** ![phlinux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/2acd7d/32.png) [@phlinux](https://www.debian-fr.org/u/phlinux)\
**Post date:** [Février 20, 2016, 7:32 UTC](https://www.debian-fr.org/t/erreur-script/20065/15 "2016-02-20T19:32:15Z")

</div>

re-  
Bon ça fonctionne plus du tout.  
Tant pis, je les ferai un par un.

Merci à tous

@+

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 8:10 UTC](https://www.debian-fr.org/t/erreur-script/20065/16 "2016-02-20T20:10:59Z")

</div>

[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`

---

<div class="post-metadata">

**Author:** ![phlinux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/2acd7d/32.png) [@phlinux](https://www.debian-fr.org/u/phlinux)\
**Post date:** [Février 20, 2016, 8:11 UTC](https://www.debian-fr.org/t/erreur-script/20065/17 "2016-02-20T20:11:01Z")

</div>

re-  
François merci d’avoir persévéré.  
Il subsistait une toute petite erreur renvoyée par find. Vous comprendrez en lisant`for file in `find . -name "*.flv"` ; do
    echo "conversion de : ${file}"
    ffmpeg -i "$file" "`basename ${file} .flv`.avi"
done`

Encore merci à tous

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 8:11 UTC](https://www.debian-fr.org/t/erreur-script/20065/18 "2016-02-20T20:11:03Z")

</div>

Pourquoi passer par une boucle quand find peut tout faire lui même ?

> [@](#):
>
> find . -name “\*.flv” -exec ffmpeg -i “{}” “`basename \{\} .flv`.avi” ;

Il doit même y avoir moyen de faire ça :

> [@](#):
>
> find . -name “\*.flv” -exec ffmpeg -i {} ${{}/.flv/.avi} ;
