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 :

Script Shell Bash


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Script Shell Bash
    Bonjour , voila j'ai un petit travail a faire et j'aurais besoin de votre aide . j'aimerais quelque conseil pour un script shell que je dois faire .

    Intitulé :
    Utilitaire de création d'images miniatures

    1. Travail à faire

    Ecrire un script-shell référencé imagette qui admet en argument :

    • un nom de répertoire
    • une date au format aammjj

    et qui créé, pour chaque image au format « point jpg » contenue dans le répertoire passé en
    argument et dont la date de dernière modification est postérieure à celle passée en second
    argument, une imagette (thumbnail) au format « point png » et de taille lOOx 100 pixels.
    Ces imagettes sont placées dans un nouveau répertoire référencé miniatures et créé dans le
    répertoire passé en premier argument.

    4. Contraintes

    On programmera dans « l'esprit Unix ». On n'oubliera donc pas de tester :

    -Le nombre d'argument
    -L'existence et le type du fichier passé en argument
    -L'autorisation du droit d'écriture sur ce répertoire (pour permettre la création du
    sous répertoire miniatures)
    - Le format correct de la date passée en argument

    Le code de retour renvoyé sera :

    - égal à 1 en cas de problème d'argument
    -égal à 2 en cas de problème d'existence ou de type du fichier passé en argument
    -égal à 3 en cas de problème de droit d'écriture
    -égal à 4 en cas de problème de format de date

    conforme à l'esprit Unix si tout va bien
    Biensur je ne vous demande pas de faire le scipt ( sauf si vous le desirez ^^ ), mais juste quelques conseil , comme j'ai un peu de mal a comprendre , merci

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    Pour ta fonction de recherche de fichier dont la date est supérieure a $DATE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find ............-optionnewer............ -exec <conversion de l'image en miniature> \;

    bref


    tu commences

    test des arguments :
    -nombre ok => charge les variables / Ko => message erreur => quitter
    -test du répertoire si KO => message erreur => quitter
    -test si il y a des fichiers correspondants si KO => message information => quitter si il y en a => fonction traitement => message information => quitter

    ON N'OUBLIE PAS QUE .JPG PEUT AUSSI ÊTRE .jpg .jpeg .JPEG !!!!!!!!

    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
     
    #!/bin/ksh
    #
    #Zone de commentaires
    #
    AA()
    {
    # analyse des arguments
    }
    fonction_principale()
    {
    #traitement
    }
    usage()
    {
    # affiche l'aide a l'utilisateur avec la description des paramètres
    # qu'il doit passer
    # cette fonction doit être appelé systématiquement pour toute erreur 
    # d'arguments 
    }
    #
    # corps du script
    #
    AA
    if [ $? -gt 0 ] ; then usage ; fi
    fonction_principale
    exit $?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    J'ai un peu de mal à comprendre ton truc mais merci de ton aide il y a quelques trucs qui peuvent me servir

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Voila où j'en suis :

    #!/bin/bash

    # test nombres d'arguments

    if ! (( "$#" == 2 ))
    then
    echo "Nombres d'arguments invalide"
    exit 1
    fi

    # séparer date

    echo $2
    jour=$(echo $2 | cut -c5,6)
    mois=$(echo $2 | cut -c3,4)
    annee=$(echo $2 | cut -c1,2)

    # Verification date

    if (($mois>12 || $mois<=0))
    then echo "format non valide"
    exit 4
    else
    echo "ok"
    fi

    if (($jour>31 || $jour<=0))
    then
    echo "format non valide"
    exit 4
    else
    echo "ok"
    fi



    # Derniere modification

    for all in $1
    if
    then
    do
    echo "$(stat -c %X )"
    done
    exit 0
    done
    else
    exit 0

    # Vérifier droits répertoire

    if test -d $1 && test -w $1
    then
    echo "$1 droits ok"
    else
    echo "$1 droits non ok"
    exit 3
    fi

    for $1 in `ls *.jpg *.jpeg *.JPEG`
    do
    convert ( ls $1 ) -thumbnail '100x100>' miniatures/$image

    done
    Si quelqu'un peut me le corriger et me dire ce que je dois encore ajouter ça serait sympa

  5. #5
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    Citation Envoyé par kreuk801 Voir le message
    Voila où j'en suis :

    Si quelqu'un peut me le corriger et me dire ce que je dois encore ajouter ça serait sympa
    n'utilise pas
    for ... ; do ..... done

    car tu ne gères pas la date de tes fichiers
    utilise

    find .............. -exec ................. \;

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 957
    Points : 4 386
    Points
    4 386
    Par défaut
    Citation Envoyé par frp31 Voir le message
    n'utilises pas
    for ... ; do ..... done

    car tu geres pas la date de tes fichiers
    utilises

    find .............. -exec ................. \;
    il n'est pas certain que find tout seul résolve le problème de recherche sur la date :
    les options de find pour les recherches par date sont soit de la famille "newer" et le paramètre est un fichier, soit "atime" et le paramètre est un laps de temps et non une date.
    (mais à vérifier, find peut avoir des options différentes d'un OS à l'autre…)

    L'astuce sera peut-être de combiner avec touch et son option -t qui permet de créer un fichier et modifier ses dates d'accès et de modification.
    L'idée alors serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    # assuming myself is the basename of the running script: $(basename $0)
    comparefile=$(mktemp /tmp/$myself.XXXX)
    # add error processing if $? == 1
    # -t param of touch takes a [[CC]YY]MMDDhhmm[.SS] parameter so add 0000 (4 zeroes) for hhmm
    touch -t "$2"0000 $comparefile
    find-newer $comparefile -exec …
    …
    rm $comparefile
    NB
    pour que le script soit plus général concernant le JPEG :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $(file $filetotest | grep -c JPEG)
    renvoie 1 si le fichier est reconnu comme un JPEG d'après son contenu et non d'après son extension…
    ce qui évite de se préoccuper des variations .jpg, .jpeg, … min/maj…

  7. #7
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    oui tout à fait la méthode portable est bien

    touch fichier en spécifiant la date de référence
    puis
    faire le find avec ce fichier référent comme comparateur de date

    l'intérêt est multiple :
    1- garantir que le répertoire est bien writable en droits pour intégrer les résultats
    2- si le fichier est présent c'est que la dernière passe a échoué ou a été interrompue par l'utilisateur
    3- ça permet de garantir que ça marche toujours même si la date-système est fausse
    etc....

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 467
    Points
    19 467
    Par défaut
    Je propose cette solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/bash
     
    [ -z "$2" ] && exit 1
    [ -d "$1" ] && { [ -w "$1" ] || exit 3; } || exit 2
    [[ $2 =~ [0-9]{6} && $(date -d "$2" >/dev/null 2>&1) ]] && dateSec=$(date -d "$2" +%s) || exit 4
     
    [ -d "$1/miniatures" ] || mkdir "$1/miniatures"
     
    shopt -s nullglob
    for image in "$1"/*.jpg
    do (( $(stat -c%Y "$image") > $dateSec )) && convert "$image" -thumbnail '100x100' "$1/miniatures/${image%.*}.png"
    done
    l'énoncé ne me paraît pas ambigu :
    image au format « point jpg » [...] imagette (thumbnail) au format « point png »
    je ne cherche donc que les fichier.jpg

Discussions similaires

  1. Script Shell bash pour sauvegarder
    Par lolilol59 dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 17/04/2014, 13h05
  2. script shell bash
    Par arnaud9742 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 26/07/2010, 12h59
  3. script shell bash
    Par arnaud9742 dans le forum Linux
    Réponses: 2
    Dernier message: 23/06/2010, 11h15
  4. Script , Shell , Batch , Bash?
    Par A_B dans le forum Windows XP
    Réponses: 8
    Dernier message: 05/06/2007, 21h23
  5. Script Shell Bash
    Par kolfred dans le forum Linux
    Réponses: 4
    Dernier message: 06/10/2006, 12h04

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