Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/01/2011, 17h03   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 12
Points : 1
Points : 1
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é :
Citation:
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
kreuk801 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2011, 20h40   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
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 : 3 534
Points : 7 742
Points : 7 742
Pour ta fonction de recherche de fichier dont la date est supérieure a $DATE :

Code :
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 :
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 $?
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/01/2011, 16h40   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 12
Points : 1
Points : 1
J'ai un peu de mal à comprendre ton truc mais merci de ton aide il y a quelques trucs qui peuvent me servir
kreuk801 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2011, 18h23   #4
Invité de passage
 
Inscription : janvier 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 12
Points : 1
Points : 1
Voila où j'en suis :

Citation:
#!/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
kreuk801 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2011, 22h41   #5
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
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 : 3 534
Points : 7 742
Points : 7 742
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 ................. \;
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 10h43   #6
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 291
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 291
Points : 2 737
Points : 2 737
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 :
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 :
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…
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/01/2011, 14h47   #7
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
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 : 3 534
Points : 7 742
Points : 7 742
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....
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/01/2011, 15h01   #8
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 066
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 066
Points : 4 138
Points : 4 138
Je propose cette solution :
Code :
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 :
Citation:
image au format « point jpg » [...] imagette (thumbnail) au format « point png »
je ne cherche donc que les fichier.jpg
N_BaH est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h23.


 
 
 
 
Partenaires

Hébergement Web