[BASH] Problème de traitement sur boucle FOR

Problème de traitement sur boucle FOR [BASH] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 10-12-2011 à 12:20:41    

Bonjour à tous,
 
après pas mal de recherches, je n'arrive pas à solutionner mon problème.
Je souhaite à l'aide d'une boucle for faire un traitement de fichier vidéos pour 3 extensions (avi, mkv et ogm).
Voici la portion de script concernée (et simplifiée, car en réalité je ne fais pas un "echo $VIDEO" ) :

Code :
  1. for VIDEO in "*.avi *.ogm *.mkv"
  2. do
  3. echo $VIDEO
  4. done


Le problème : si par exemple, il n'y avait dans le répertoire que des ".avi", un "echo $VIDEO" me renvoie :

Code :
  1. video_01.avi video_02.avi video_03.avi *.ogm *.mkv


Or les "*.ogm" et "*.mkv" ne sont du coup pas des fichiers à traiter.
 
Une idée ?
 
Merci par avance  :jap:


Message édité par slywalker le 10-12-2011 à 12:22:53
Reply

Marsh Posté le 10-12-2011 à 12:20:41   

Reply

Marsh Posté le 10-12-2011 à 13:54:31    

pour les cas d'erreur, on les fout a la poubelle alors (ajout en rouge)
une soluce serait la suivante:
for i in `ls *.avi *.xxx 2>/dev/null`; do echo $i;done


Message édité par Xpif le 11-12-2011 à 12:23:14
Reply

Marsh Posté le 10-12-2011 à 15:47:26    

Alors ça me renvoie :

Code :
  1. ls: impossible d'accéder à *.ogm: Aucun fichier ou dossier de ce type
  2. ls: impossible d'accéder à *.mkv: Aucun fichier ou dossier de ce type
  3. video_01.avi
  4. video_02.avi
  5. video_03.avi


Donc ça ne me va toujours pas, il faudrait faire disparaitre les 2 premières lignes ...
 
En tout cas merci pour ton aide  :jap:

Reply

Marsh Posté le 10-12-2011 à 20:29:54    

Pour info, j'ai trouvé la solution. C'était tout con mais je n'était pas parti dans ce sens  :sweat:  

Code :
  1. for VIDEO in `find . -name "*.avi" | cut -d/ -f2 &&  find . -name "*.ogm" | cut -d/ -f2 &&  find . -name "*.mkv" | cut -d/ -f2`
  2. do
  3. echo $VIDEO
  4. done


A mon avis c'est pas propre mais ça marche  :)

Reply

Marsh Posté le 11-12-2011 à 12:24:17    

j'ai édité mon mesg precedent pour la "gestion"  des erreurs, (passent a la trappe) au cazou
:jap:

Reply

Marsh Posté le 20-12-2011 à 12:31:59    

On ne doit pas mettre de quotes sur un glob !
Et puis il te manque un reglage shopt :

Code :
  1. shopt -s nullglob
  2. for i in *.avi *.ogm *.mkv; do echo "$i"; done

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed