#1 Le 20/01/2010, à 21:13
- Rizzen Virnn
[bash] conversion de fichier de façon récursive
Bonjour,
j'aimerais faire des conversions de mes fichiers video en série.
Un exemple vaut un long discours
dossier1/
dossier11/
fichier1.avi
fichier2.avi
fichier3.txt
fichier4.avi
dossier2/
fichier5.odt
fichier6.ogg
fichier7.avi
devrait créer à coté un dossier convert/ contenant
convert/
dossier1/
dossier11/
fichier1.avi
fichier2.avi
fichier4.avi
fichier7.avi
dossier1/
...
pour lister les fichiers j'ai déjà
for NAME in *.avi;
do
mencoder "$NAME" ...
done
mais j'ai un peu du mal avec les sous-dossiers et les chemins
merci
edit : aaah peut être que je devrais regarder du coté de "find -name *.avi" mais je n'arrive pas à séparer ligne par ligne après
Dernière modification par Rizzen Virnn (Le 20/01/2010, à 21:46)
Ubuntu 12.04 32bit - Archlinux 64 bit
HP Pavilion dv6790eb
Blog
Hors ligne
#2 Le 20/01/2010, à 21:47
- heuuuuu
Re : [bash] conversion de fichier de façon récursive
Je pense que le mieux est de faire une copie de tout le répertoir dans le repertoir convret, puis une fonction recursive
function f
for i in `ls`
do
if [ -d $i ] #test pour voir si il s'agit d'un repertoir
then
pushd $i
f
popd
else
mencoder $i
fi
done
pas testé par vérifié... mais l'idée est là...
Quand les avions en papier ne partent plus au vent
On se dit que l'bon temps passe finalement...
...comme une étoile filante
http://forum.ubuntu-fr.org/viewtopic.php?id=139410
Hors ligne
#3 Le 20/01/2010, à 22:00
- Rizzen Virnn
Re : [bash] conversion de fichier de façon récursive
merci je ne connaissais pas pushd et popd
par contre "for i in ls" me compte un fichier avec un espace comme deux fichiers
Ubuntu 12.04 32bit - Archlinux 64 bit
HP Pavilion dv6790eb
Blog
Hors ligne
#4 Le 20/01/2010, à 22:08
- heuuuuu
Re : [bash] conversion de fichier de façon récursive
merci je ne connaissais pas pushd et popd
par contre "for i in ls" me compte un fichier avec un espace comme deux fichiers
Effectivement, j'oublie toujours ce problème, la solution est d'utiliser while read il me semble...
Quand les avions en papier ne partent plus au vent
On se dit que l'bon temps passe finalement...
...comme une étoile filante
http://forum.ubuntu-fr.org/viewtopic.php?id=139410
Hors ligne
#5 Le 20/01/2010, à 22:22
- francoisp31
Re : [bash] conversion de fichier de façon récursive
et surtout ${i} au lieu de $i en meme temps
Que les puces d'un millier de chiens galleux infeste le cul de celui qui osera vous gacher ne serai ce
qu'une seule journée de votre vie et que les bras lui soient trop court pour qu'il puisse se le gratter.
Hors ligne
#6 Le 20/01/2010, à 22:45
- sputnick
Re : [bash] conversion de fichier de façon récursive
for i in $(ls) ca n'existe pas en programmation shell.
CF-> http://partmaps.org/era/unix/award.html#ls
Voici la solution :
find dossier1 -type -f -iname '*.avi' -exec mencoder <options> {} +
Pour ce qui est de ${i} au lieu de $i, c'est inexact. Les {} sont necessaires uniquement quand le nom de la variable peux etre perturbé par des caracteres adjacents. Par exemple la variable foo :
$ foo=123456
$ echo $foobar
$ echo ${foo}bar
123456
Le bon choix c'est toujours des variables avec des quotes doubles pour eviter le word-spliting.
De la bonne doc :
http://bash-hackers.org/wiki/doku.php/syntax/words http://www.grymoire.com/Unix/Quote.html
Dernière modification par sputnick (Le 20/01/2010, à 22:51)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#7 Le 20/01/2010, à 22:48
- Totor
Re : [bash] conversion de fichier de façon récursive
Bonsoir,
D'après l'exemple, le fichier de sortie conserve le même nom. Donc voilà qui devrait suffir :
mkdir -p convert
find . -type f -iname "*.avi" -exec mencoder {} -o convert/{} \;
Reste à faire : rajouter les options qui vont bien
EDIT : sputnick est passé par là entre 2
Dernière modification par Totor (Le 20/01/2010, à 22:49)
-- Lucid Lynx --
Hors ligne
#8 Le 20/01/2010, à 22:50
- Totor
Re : [bash] conversion de fichier de façon récursive
for i in $(ls) ca n'existe pas en programmation shell.
Malheureusement, on le voit trop souvent (ainsi que sa variante ls | while read ...)
-- Lucid Lynx --
Hors ligne
#9 Le 20/01/2010, à 22:58
- nesthib
Re : [bash] conversion de fichier de façon récursive
bon grillé par Totor
edit : et par sputnick
j'étais en train de chercher comment faire une substitution dans le {} du exec de find, si quelqu'un a une solution simple et jolie
Dernière modification par nesthib (Le 20/01/2010, à 23:00)
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#10 Le 20/01/2010, à 23:00
- Rizzen Virnn
Re : [bash] conversion de fichier de façon récursive
et le mencoder, il crée les sous-dossiers dans convert ?
en cherchant j'avais pondu ça mais je sais pas si c'est très correcte (euuuh je fais un "| while read", c'est pas bien ?)
find . | while read f
do
if [[ "$f" == ./convert* ]]; then true
else
if [ -d "$f" ]
then
if test ! -d "convert/$f"
then
mkdir "convert/$f"
fi
else
if [[ "$f" == *.avi ]]
then
if test ! -e "convert/${f%avi}flv"
then
mencoder "$f" -o "convert/${f%avi}flv" ...
fi
fi
fi
fi
done
bon faut savoir aussi que mon mencoder il aura plein d'options
je compte convertir les avi en flv, je sais pas si c'est possible avec votre commande
parce que un soucis aussi est si je rajoute un fichier dans un dossier, j'aimerais que en relançant le script, il ne s'occupe que de la vidéo ajoutée et ne me reconvertisse pas tout encore une fois
Dernière modification par Rizzen Virnn (Le 20/01/2010, à 23:13)
Ubuntu 12.04 32bit - Archlinux 64 bit
HP Pavilion dv6790eb
Blog
Hors ligne
#11 Le 20/01/2010, à 23:05
- sputnick
Re : [bash] conversion de fichier de façon récursive
Pourquoi ne pas apprendre les bonnes méthodes dès le début au lieu de perdre son temps à apprendre des trucs biaisés ? Ca reste un mystère. Enfin si, des mauvaises docs trouvées ci et là sur le net
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#12 Le 20/01/2010, à 23:10
- sputnick
Re : [bash] conversion de fichier de façon récursive
find dossier1 -type f -iname '*.avi' -exec bash -c 'mencoder "$1" -o "${1%avi}flv"' -- {} \;
Edit: changé -type -f en -type f
Dernière modification par sputnick (Le 20/01/2010, à 23:41)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#13 Le 20/01/2010, à 23:31
- nesthib
Re : [bash] conversion de fichier de façon récursive
c'est -type f pas -f
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#14 Le 20/01/2010, à 23:39
- sputnick
Re : [bash] conversion de fichier de façon récursive
Ooops, oui, pas testé "Typo" comme on dit en Anglais.
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#15 Le 21/01/2010, à 09:01
- heuuuuu
Re : [bash] conversion de fichier de façon récursive
for i in $(ls) ca n'existe pas en programmation shell.
CF-> http://partmaps.org/era/unix/award.html#ls
:$ Merci pour le lien, et désolé pour les bêtises dites.
Quand les avions en papier ne partent plus au vent
On se dit que l'bon temps passe finalement...
...comme une étoile filante
http://forum.ubuntu-fr.org/viewtopic.php?id=139410
Hors ligne