appliquer une commande à une série de fichiers

Le
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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Alain Ketterlin
Le #770940
miterrandir
[...]
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.

Luc.Habert.00__arjf
Le #770939
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

Luc.Habert.00__arjf
Le #770938
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.

Stephane Chazelas
Le #770937
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

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

miterrandir
[...]
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 ?


Alain Ketterlin
Le #770935
miterrandir
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.


Marc
Le #770934
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).

Thierry PINELLI
Le #770933
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

Nicolas S.
Le #770932
Thierry PINELLI
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.

Thierry PINELLI
Le #770655
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+

Publicité
Poster une réponse
Anonyme