IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

renommer les fichier par script en nom_dossier_jour.jpg


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Par défaut renommer les fichier par script en nom_dossier_jour.jpg
    Bonjour à tous,

    Voilà j'ai développer un petit script qui me permet de traiter mes image par lots, (redimensionnement, fusionnement,...)

    mais je bute sur une chose j'aimerais encore qu'il renomme tout les images par
    nom_dossier_jourmois_01.jpg
    exemple:
    dans le dossier (fiche technique) le 1janvier fiche_technique_0101_01.jpg
    ou encore
    dossier (image de coupe) le 4mars image_de_coupe_0403_01.jpg, image_de_coupe_02.jpg...

    Mais j'ai un peu de mal pour récupérer le nom du dossier et ajouter le date.
    Si quelque pouvais m'aidez ca serais génial.

    Merci à vous


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    ##############################################
    # Réduction de la taille des photos du répertoire courant avec ImageMagick
    ##############################################
     
    # Nom du nouveau répertoire
    NV_DOSSIER=reduc
    # Création du nouveau dossier s'il n'existe pas
    if [ -d $NV_DOSSIER ] ;
    then
    echo "Le dossier reduc existe déjà"
    else
    mkdir $NV_DOSSIER
    fi
     
    # Pour toutes les photos (JPG) du répertoire
    for i in *.JPG ;
    do
    # Réduit l'image en 601x400
    convert "$i" -resize 601x400  "$NV_DOSSIER/$i"
    # fusione l'image avec un calque contenant les coins
    composite -gravity center /home/sacha/Bureau/cadre.png "$NV_DOSSIER/$i" "$NV_DOSSIER/$i"
    # fin de la boucle FOR
    done 
     
    # Pour toutes les photos (jpg) du répertoire
    for i in *.jpg ;
    do
    # Réduit l'image en 601x400
    convert "$i" -resize 601x400  "$NV_DOSSIER/$i"
    # fusione l'image avec un calque contenant les coins
    composite -gravity center /home/sacha/Bureau/cadre.png "$NV_DOSSIER/$i" "$NV_DOSSIER/$i"
    # fin de la boucle FOR
    done

  2. #2
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    jourmois=$(date +'%d%m')
    for image in *[jJ][pP][gG]; do
       rep="${image%/*}"
       rep="${rep##*/}"
       image="${image##*/}"
       echo "${rep}_${jourmois}_$image"
    done
    Dernière modification par Invité ; 06/01/2010 à 11h54.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Avril 2009
    Messages : 26
    Par défaut
    Autre possibilité similaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DATE="$(/usr/bin/date '+%d%m')_"
    for IMAGE in $(find  $REP -name "*.jpg")
    do
       DOSSIER="$(basename $(dirname $IMAGE))_"
       FIC="$(basename $IMAGE)"
       echo "$DOSSIER$DATE$FIC"
    done

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Par défaut
    Je te remercie mais il semble que ca ne fonctionne pas.

    Voiçi mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    ##############################################
    # Réduction de la taille des photos du répertoire courant avec ImageMagick
    ##############################################
     
    # Nom du nouveau répertoire
    NV_DOSSIER=reduc
    # Création du nouveau dossier s'il n'existe pas
    if [ -d $NV_DOSSIER ] ;
    then
    echo "Le dossier reduc existe déjà"
    else
    mkdir $NV_DOSSIER
    fi
     
    # Pour toutes les photos (JPG) du répertoire
    for i in *.[jJ][pP][gG] ;
    do
    # Réduit l'image en 601x400
    convert "$i" -resize 601x400  "$NV_DOSSIER/$i"
    # fusione l'image avec un calque contenant les coins
    composite -gravity center /home/sacha/Bureau/cadre.png "$NV_DOSSIER/$i" "$NV_DOSSIER/$i"
    # fin de la boucle FOR
    done  
     
    for image in *[jJ][pP][gG]; do
       rep="${image%/*}"
       rep="${rep##*/}"
       image="${image##*/}"
       echo "${rep}_$(date +'%y%m')_$image"
    done

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [sacha@localhost ~/Bureau/images]$ reductiontest.sh
    aze1.JPG_1001_aze1.JPG
    qsdf3.JPG_1001_qsdf3.JPG
    qsdsqd2.jpg_1001_qsdsqd2.jpg
    et le résultat il ne me renomme pas les image.?
    et dans l'echo qui est affiché on peut voir qu'il ne met pas le dossier.?

    du coup j'ai essayé de l'adapter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    # Nom du nouveau répertoire
    NV_DOSSIER=reduc
    # Création du nouveau dossier s'il n'existe pas
    if [ -d $NV_DOSSIER ] ;
    then
    echo "Le dossier reduc existe déjà"
    else
    mkdir $NV_DOSSIER
    fi
     
    # Pour toutes les photos (JPG) du répertoire
    for i in *.[jJ][pP][gG] ;
    do
    # Réduit l'image en 601x400
    convert "$i" -resize 601x400  "$NV_DOSSIER/$i"
    # fusione l'image avec un calque contenant les coins
    composite -gravity center /home/sacha/Bureau/cadre.png "$NV_DOSSIER/$i" "$NV_DOSSIER/$i"
    # fin de la boucle FOR
    done 
     
    cd "$NV_DOSSIER" 
    # mise a zero (1) du compteur
    num=1
     
    for image in *[jJ][pP][gG]; do
       rep="${image%/*}"
       rep="${rep##*/}"
       image="${image##*/}"
       echo "${rep}_$(date +'%y%m')_$image"
       var=$(echo $file | awk -F. '{print $1}')
       mv "$file" "fruit_$(date +'%y%m')_00${num}.jpg"
    ((num=num+1))
    done
    mais il me dis:
    [sacha@localhost ~/Bureau/images]$ reductiontest.sh
    aze1.JPG_1001_aze1.JPG
    mv: ne peut évaluer `': Aucun fichier ou répertoire de ce type
    qsdf3.JPG_1001_qsdf3.JPG
    mv: ne peut évaluer `': Aucun fichier ou répertoire de ce type
    qsdsqd2.jpg_1001_qsdsqd2.jpg
    mv: ne peut évaluer `': Aucun fichier ou répertoire de ce type

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Par défaut
    concernant la soluce de syjis

    [sacha@localhost ~/Bureau/images]$ reductiontest.sh
    /bin/reductiontest.sh: line 39: /usr/bin/date: Aucun fichier ou répertoire de ce type
    .__qsdsqd2.jpg

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Par défaut
    pour la soluce de syjis
    j'ai modifier:
    DATE="$(/usr/bin/date '+%d%m')_"
    par
    DATE="$(date '+%d%m')_"

    ce qui fonctionne mais l'echo me donne:
    ._0601_qsdsqd2.jpg
    ce qui ne m'avance pas beacoup.

  7. #7
    Invité
    Invité(e)
    Par défaut
    bah, mv $file ... mais $file n'existe pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rep=$(pwd)
    for image in $rep/*[jJ][pP][gG]
    ...
    done

  8. #8
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Par défaut
    effectivement.

    a force de mélanger des bout de code...

    à part ceci mon plus gros souci est surtout de pouvoir récupérer le nom de mon dossier

    sachant que mon script en sous /bin en exécutable et que donc je le lance depuis un autre dossier.

    si je le lance de
    /home/sacha/Bureau/images/test image 2/
    je voudrais récupérer test_image_2
    et c'est la dessus que je bute.
    récupérer la chaine complète avec pwd pas de souci mais récupérer juste des dernier dossier la je peche.

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Avril 2009
    Messages : 26
    Par défaut
    Avec ma solution, essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DOSSIER="$(basename $(pwd))_"
    et avec la solution de N_BaH
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CHEMIN_ABSOLU="$(pwd)"
    REP=${CHEMIN_ABSOLU##*/}
    echo $REP

  10. #10
    Invité
    Invité(e)
    Par défaut
    Code ~/bin/reduction_test : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/bash
    
    jourmois=$(date +'%d%m')
    rep=$(pwd)
    for image in "$rep"/*[jJ][pP][gG]; do
       ((++num))
       rep="${image%/*}"
       rep="${rep##*/}"
       rep="${rep// /_}"
       image="${image##*/}"
       printf '%s_%s_%.4d_%s\n' ${rep} ${jourmois} ${num} $image #on dit merci à Fred
    done
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ~/$ ls mon_rep/images\ test\ 2/
    fichier1.jpg  fichier2.jpg  fichier3.jpg  fichier4.jpg  fichier5.jpg
    ~/$ cd mon_rep/images\ test\ 2
    ~/mon_rep/images test 2/$../../bin/reduction_test 
    images_test_2_0601_0001_fichier1.jpg
    images_test_2_0601_0002_fichier2.jpg
    images_test_2_0601_0003_fichier3.jpg
    images_test_2_0601_0004_fichier4.jpg
    images_test_2_0601_0005_fichier5.jpg
    Dernière modification par Invité ; 06/01/2010 à 17h27. Motif: utilisation de printf au lieu de echo

  11. #11
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Par défaut
    Mille merci à vous,
    Mais je sais pas pourquoi mais ca marche pas chez moi:
    scriptbah.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    jourmois=$(date +'%d%m')
    currep=$(pwd)
    for image in $currep/*[jJ][pP][gG]; do
       ((++num))
       rep="${image%/*}"
       rep="${rep##*/}"
       image="${image##*/}"
       printf '%s_%s_%.4d_%s\n' ${rep} ${jourmois} ${num} $image #on dit merci à Fred
    done
    [sacha@localhost ~/Bureau/image test]$ ls
    image1.JPG* image2.jpg*
    [sacha@localhost ~/Bureau/image test]$ scriptbah.sh
    Bureau_0601_0001_image
    test_0601_0002_image1.JPG
    image2.jpg__0000_

    et pour la soluce syjis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DATE="$(date '+%d%m')_"
    for IMAGE in $(find  $REP -name "*.jpg")
    do
       DOSSIER="$(basename $(pwd))_"
       FIC="$(basename $IMAGE)"
       echo "$DOSSIER$DATE$FIC"
    done
    [sacha@localhost ~/Bureau/image test]$ ls
    image1.JPG* image2.jpg*
    [sacha@localhost ~/Bureau/image test]$ scriptsyjis.sh
    image_0601_image2.jpg

    Donc je comprend pas ce qui déconne chez moi...
    Ce que je cherche à avoir est
    image_test_0601_image2.jpg

    En tout les cas mille merçi encore pour votre aide.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Je viens de mettre à jour mon script au-dessus de ton message...

  13. #13
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Par défaut MERCI
    NIKEL...
    ca fonctionne je vous remercie tous et en particulier:
    N_BaH

    donc voncçi mon script complet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    # Nom du nouveau répertoire
    NV_DOSSIER=reduc
     
    # Création du nouveau dossier s'il n'existe pas
    if [ -d $NV_DOSSIER ] ;
    then
    echo "Le dossier reduc existe déjà"
    else
    mkdir $NV_DOSSIER
    fi
     
    # Pour toutes les photos (JPG) du répertoire
    for i in *.[jJ][pP][gG] ;
    do
    # Réduit l'image en 601x400
    convert "$i" -resize 601x400  "$NV_DOSSIER/$i"
    # fusione l'image avec un calque contenant les coins
    composite -gravity center /home/sacha/Bureau/cadre.png "$NV_DOSSIER/$i" "$NV_DOSSIER/$i"
    # fin de la boucle FOR
    done 
    rep=$(pwd)
    cd "$NV_DOSSIER" 
    # mise a zero (1) du compteur
    num=1
    jourmois=$(date +'%d%m')
     
    for image in "$rep"/*[jJ][pP][gG]; do
       ((++num))
       rep="${image%/*}"
       rep="${rep##*/}"
       rep="${rep// /_}"
       image="${image##*/}"
    nv_nom=$(printf '%s_%s_%.4d_%s\n' ${rep} ${jourmois} ${num} $image) #on dit merci à Fred
    mv "$image" $nv_nom 
    done
    Enfin complet il me reste encore du boulot, mais voilà déjà un bonne partie de faite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBS]Renommer les fichiers du répertoire courant
    Par JuS80 dans le forum VBScript
    Réponses: 2
    Dernier message: 02/03/2007, 09h17
  2. Réponses: 11
    Dernier message: 19/11/2006, 12h45
  3. Réponses: 4
    Dernier message: 07/11/2006, 10h20
  4. Trouver les fichiers par utilisateurs
    Par calfater dans le forum Windows XP
    Réponses: 2
    Dernier message: 11/10/2005, 17h30
  5. Trier les fichiers par type et les afficher par groupe ...
    Par KneXtasY dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 18/09/2005, 18h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo