Forum Programmation.shell Appliquer une commande sur plusieurs fichiers

Posté par  .
Étiquettes : aucune
0
20
avr.
2005
Bonjour à tous,

J'essaie d'écrire un script qui convertit l'ensemble des images jpg d'un repertoire en diminuant la qualité.

Ma commande marche parfaitement sur un fichier.

J'ai trouvé ceci pour convertir l'ensemble des fichiers :

for i in *.jpg
do
convert $i...
done

Ca marche très bien sur des fichiers sans espace mais avec des espaces, ça plante.

Donc du coup je me suis lancé dans une autre voie mais je ne m'en sors pas.

La commande suivante me retourne bien l'ensemble des fichiers dont j'ai besoin avec les "\ " à la place des " "
ls -b *.jpg | awk '{print $0}'

Le problème c'est que j'arrive pas à récupérer ces noms et les réinsérer dans ma commande de conversion qui donne quelquechose du genre :

ls -b *.jpg | awk '{convert -quality $qualite $0 test/$0} '

L'idéal pour moi ce serait de trouver comment replacer le ls *.jpg utilisé par la boucle for i in *.jpg par un ls -b mais je sais pas si c'est possible...

Bref je suis un peu coincé là, je ne sais pas si mon problème est clair mais si quelqu'un peut m'aider à l'éclaircir ou a la solution... merci d'avance :)

Rb
  • # Guillemets

    Posté par  (site web personnel) . Évalué à 6.

    Essaye simplement:

    for i in *.jpg
    do
    convert "$i"...
    done

    Les guillemets devraient permettre les espaces.
  • # re

    Posté par  . Évalué à 4.

    Mets $i entre quote :


    [binarym@gco]:/tmp/test% echo "blabla" > test\ 1
    [binarym@gco]:/tmp/test% for i in *; do
    for> cat "$i"
    for> done
    blabla
    [binarym@gco]:/tmp/test% ls
    test 1
  • # [HS] find/xargs

    Posté par  (site web personnel) . Évalué à 2.

    C'est sans doute trop compliqué pour ton cas (et de toute façon ça ne doit pas marcher, parce que tu as besoin du nom du fichier plusieurs fois), mais ça sert beaucoup dans d'autres cas (surtout avec des noms de répertoire avec des blancs)

    find . -name "*.jpg" -print0 | xargs -0 grep
  • # IFS

    Posté par  . Évalué à 2.

    IFS=$'\n'


    for i in $( ls *jpg )
    do
    convert $i ...
    done
    • [^] # Re: IFS

      Posté par  . Évalué à 1.

      Merci pour vos réponses et votre rapidite ! Je m'en vais essayer tout ça, j'aime bien la solution de Frederic Brugmans, c'est super propre.

      Seule question, c'est quoi le IFS ? je vais voir dans le man bash a tout hasard quand même ... :)
      • [^] # Re: IFS

        Posté par  . Évalué à 1.

        Bravo Frédéric !!

        Ta solution marche nickelle et je sais ce que c'est qu'IFS désormais :)

        Grand Merci pour ta réponse.

        Rb

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.