Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

appliquer une commande à une série de fichiers

25 réponses
Avatar
miterrandir
Bonjour

J'ai une liste de fichiers contenus dans un répertoire auxquels je souhaite
passer une commande.

Exemple :

$ ffmpeg -i nom_aleatoire.flv nom_aleatoire.avi
$ ffmpeg -i nom_aleatoire2.flv nom_aleatoire2.avi
[...]

La commande converti le fichier flv existant en un fichier avi qu'elle créé.

Je cherche une petite recette pour automatiser ça svp. Dans le genre
convertir tous les fichiers flv en avi, vec le même nom..
merci d'avance.

10 réponses

1 2 3
Avatar
Alain Ketterlin
miterrandir writes:

[...]
Je cherche une petite recette pour automatiser ça svp. Dans le genre
convertir tous les fichiers flv en avi, vec le même nom..
merci d'avance.


for f in *.flv; do
whatever $f $(dirname $f)/$(basename $f .flv).avi
done

C'est pour bash. Aucune idée comment ça se porte sous d'autres shells.

Tu peux remplacer *.flv par n'importe quoi qui produise une liste de
fichiers, par exemple find.

Quelqu'un connait-il plus simple que le $(...)/$(...).avi ?

-- Alain.

Avatar
Luc.Habert.00__arjf
miterrandir :

$ ffmpeg -i nom_aleatoire.flv nom_aleatoire.avi
$ ffmpeg -i nom_aleatoire2.flv nom_aleatoire2.avi


for f in *.flv; do
ffmpeg -i "$f" "${f%flv}avi"
done

Avatar
Luc.Habert.00__arjf
Alain Ketterlin :

whatever $f $(dirname $f)/$(basename $f .flv).avi


Il faut quoter les expansions de variable, sinon ça casse dès que tu as du
whitespace ou des caractères de glob dans un nom de fichier.

Avatar
Stephane Chazelas
2007-09-28, 13:28(+02), miterrandir:
[...]
J'ai une liste de fichiers contenus dans un répertoire auxquels je souhaite
passer une commande.

Exemple :

$ ffmpeg -i nom_aleatoire.flv nom_aleatoire.avi
$ ffmpeg -i nom_aleatoire2.flv nom_aleatoire2.avi
[...]

La commande converti le fichier flv existant en un fichier avi qu'elle créé.

Je cherche une petite recette pour automatiser ça svp. Dans le genre
convertir tous les fichiers flv en avi, vec le même nom..
merci d'avance.


Avec zsh:

for f (*.flv) ffmpeg -i $f $f:r.avi

Pour convertir aussi les flv dans les sous-repertoires:

for f (**/*.flv) ffmpeg -i $f $f:r.avi

--
Stéphane

Avatar
miterrandir
Alain Ketterlin sur fr.comp.os.unix le vendredi 28 septembre 2007 13:43

miterrandir writes:

[...]
Je cherche une petite recette pour automatiser ça svp. Dans le genre
convertir tous les fichiers flv en avi, vec le même nom..
merci d'avance.


for f in *.flv; do
whatever $f $(dirname $f)/$(basename $f .flv).avi
done

C'est pour bash. Aucune idée comment ça se porte sous d'autres shells.

Tu peux remplacer *.flv par n'importe quoi qui produise une liste de
fichiers, par exemple find.

Quelqu'un connait-il plus simple que le $(...)/$(...).avi ?

-- Alain.


Merci à tous pour les réponses, ça marche nikel (j'ai utilisé celle de
Alain). Seul hic, ça boucle une fois que tous les fichiers sont encodés (ça
repasse au premier). Comment aurais-je pu éviter ça ?


Avatar
Alain Ketterlin
miterrandir writes:

for f in *.flv; do
whatever $f $(dirname $f)/$(basename $f .flv).avi
done


Merci à tous pour les réponses, ça marche nikel (j'ai utilisé cel le de
Alain).


N'oublie pas de lire les messages de Luc. Et l'utilisation du
$(f%flv}avi est préférable à la construction ci-dessus (par ex. si tu
manipules des fichiers dans des sous-repertoires).

Seul hic, ça boucle une fois que tous les fichiers sont encodés (ça
repasse au premier).


T'aurais pas remplacé le *.flv par autre chose ? Sinon, c'est
difficile à croire.

-- Alain.


Avatar
Marc
miterrandir wrote:

J'ai une liste de fichiers contenus dans un répertoire auxquels je souhaite
passer une commande.

Exemple :

$ ffmpeg -i nom_aleatoire.flv nom_aleatoire.avi
$ ffmpeg -i nom_aleatoire2.flv nom_aleatoire2.avi
[...]

La commande converti le fichier flv existant en un fichier avi qu'elle créé.

Je cherche une petite recette pour automatiser ça svp. Dans le genre
convertir tous les fichiers flv en avi, vec le même nom..
merci d'avance.


Juste pour varier un peu des scripts shells, avec gnu make (on peut aussi
avec d'autres versions, mais l'obtention de LISTAVI a une syntaxe
différente) :

on crée un fichier GNUmakefile qui contient :

.SUFFIXES: .flv .api

LISTFLV=$(wildcard *.flv)
LISTAVI=$(LISTFLV:.flv=.avi)

all: $(LISTAVI)

.flv.avi:
ffmpeg -i $< $@


et il n'y a plus qu'à lancer la commande make (ou gmake).

Avatar
Thierry PINELLI
miterrandir wrote:

Merci à tous pour les réponses, ça marche nikel (j'ai utilisé celle de
Alain). Seul hic, ça boucle une fois que tous les fichiers sont encodés (ça
repasse au premier). Comment aurais-je pu éviter ça ?


donc cela ne marche pas nickel

il faut donc utiliser un quelconque make avec
le makefile qui va bien

Avatar
Nicolas S.
Thierry PINELLI a écrit:

il faut donc utiliser un quelconque make avec
le makefile qui va bien


Il n'y a aucune raison pour que la boucle for, telle que présentée,
fasse un surplus d'itérations.
Make est une alternative, mais ça doit fonctionner en bash aussi.

--
Nicolas S.

Avatar
Thierry PINELLI
Marc wrote:


Juste pour varier un peu des scripts shells, avec gnu make (on peut aussi
avec d'autres versions, mais l'obtention de LISTAVI a une syntaxe
différente) :


je viens de le suggerer.

il est vrai que beaucoup de personnes pensent que cela ne sert qu'à
compiler :)

j'avais utilisé un Makefile pour du encoder du wav vers du mp3


a+

1 2 3