#1 Le 22/06/2010, à 22:27
- coolben
Comment recupperer les elements d'une date a partir une chaine
Bonjour
J'essaye de faire un script me permettant de trier mes photos et j'aimerai récupperer le jour, le mois et l'annee de ma photos.
Voici ce que j'ai :
$ identify -format "%[EXIF:Datetime]" DSC01769.JPG
2010:06:21 16:29:53
Quel(s) commande(s) peut m'aider pour récupérer le jour, le mois et l'année de cette expression ?
Merci de votre aide
http://www.starbusiness.fr : jeux en ligne bientôt Massivement Multi Joueur. Gestion et Wargame dans un univers à la conquête de l'espace ...
Hors ligne
#2 Le 22/06/2010, à 22:38
- will4linux
Re : Comment recupperer les elements d'une date a partir une chaine
La commande cut :
User@Tour:~$ echo 2010:06:21 | cut -f1 -d:
2010
User@Tour:~$ echo 2010:06:21 | cut -f2 -d:
06
User@Tour:~$ echo 2010:06:21 | cut -f3 -d:
21
2010:06:21 est vue par cut comme une chaîne à 3 champs séparés par des :
L'option -d suivie d'un caractère permet de spécifier le délimiteur entre les champs.
L'option -f suivie d'un nombre permet de sélectionner le champ souhaité.
Dernière modification par will4linux (Le 23/06/2010, à 07:41)
Hors ligne
#3 Le 22/06/2010, à 22:53
- Elzen
Re : Comment recupperer les elements d'une date a partir une chaine
Attention, si c'est une chaîne unique avec des : des deux côtés et une espace au milieu, il faudra utiliser deux fois cut pour récupérer le jour et l'heure, une pour séparer selon le délimiteur : et l'autre selon le délimiteur espace. Ou alors, utiliser tr au préalable pour transformer l'espace en : (ou les : en espaces) afin de n'avoir qu'un délimiteur unique sur l'ensemble de la chaîne.
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne
#4 Le 22/06/2010, à 22:55
- will4linux
Re : Comment recupperer les elements d'une date a partir une chaine
Oui évidemment, merci ArkSeth pour ce complément, je lui ai juste fourni la commande, mais je n'allais pas tout lui mâcher non plus
Hors ligne
#5 Le 23/06/2010, à 06:00
- coolben
Re : Comment recupperer les elements d'une date a partir une chaine
merci de votre réponse
ca me plait bien
Par contre, comment fait on pour utiliser l'espace comme délimitation ?
http://www.starbusiness.fr : jeux en ligne bientôt Massivement Multi Joueur. Gestion et Wargame dans un univers à la conquête de l'espace ...
Hors ligne
#6 Le 23/06/2010, à 07:17
- will4linux
Re : Comment recupperer les elements d'une date a partir une chaine
Salut !
Utilise ça :
cut -d' '
EDIT : C'est le caractère espace, délimité par deux apostrophes : ' '
Pour info, l'apostrophe est sur la touche 4 des claviers français
Une fois que tu n'auras plus de questions, pense à passer ce thread en résolu
Dernière modification par will4linux (Le 23/06/2010, à 07:44)
Hors ligne
#7 Le 23/06/2010, à 08:41
- Totor
Re : Comment recupperer les elements d'une date a partir une chaine
Bonjour,
#récupération des informations
datefichier=$(identify -format "%[EXIF:Datetime]" DSC01769.JPG)
# constitution d'un tableau contenant toutes les informations
tableau=( ${datefichier//:/ } )
# affichage
echo "annee=${tableau[0]}"
echo "mois=${tableau[1]}"
echo "jour=${tableau[2]}"
echo "heure=${tableau[3]}"
echo "minute=${tableau[4]}"
echo "seconde=${tableau[5]}"
-- Lucid Lynx --
Hors ligne
#8 Le 23/06/2010, à 12:09
- coolben
Re : Comment recupperer les elements d'une date a partir une chaine
Merci a tous pour votre aide
Je teste ca ce soir, si j'ai le temps ...
http://www.starbusiness.fr : jeux en ligne bientôt Massivement Multi Joueur. Gestion et Wargame dans un univers à la conquête de l'espace ...
Hors ligne
#9 Le 23/06/2010, à 19:02
- nesthib
Re : Comment recupperer les elements d'une date a partir une chaine
sinon un petit cours rapide pour faire des substitutions en bash (je suppose que tu veux classer tes photos dans des dossiers par date)
DATE = $(identify -format "%[EXIF:Datetime]" DSC01769.JPG)
DATE=${DATE% *}
echo $DATE
DATE=${DATE//:/\/}
echo $DATE
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#10 Le 24/06/2010, à 21:45
- coolben
Re : Comment recupperer les elements d'une date a partir une chaine
Au final, voici mon script qui importe mes photos et les range par date :
#!/bin/bash
# initialisation
APPAREIL=/media/0123-4567/
REPSOURCE=DCIM/
REPDEST=/home/coolben/Photos
REPANNEE=2010
#CHEMIN_ACTUELLE=$(pwd)
REPIMPORT=import
# Vérification du chemin de destination
if [ -e $REPDEST/$REPANNEE ]
then
echo "Le repertoire de destination existe bien"
else
echo "Le repertoire de destination n'existe pas"
exit
fi
echo "nb argument : "$#
if [ $# -gt 0 ]
then
# Si un argument existe, c'est le repertoire à récupper les fichiers
cd $1
else
# Vérification que l'appareil est connecté
if [ -e $APPAREIL ]
then
echo "L'apparail est bien connecté"
else
echo "L'apparail n'est pas connecté"
exit
fi
cd $APPAREIL
cd $REPSOURCE
fi
# Récupération des fichiers
for n in `ls `;
do
cd $n
for i in `ls `;
do
echo "Traitement $i ..."
# Récupération des données Exif
if ls -R $REPDEST/$REPANNEE | grep $i > /dev/null
then
echo "le fichier $i existe déjà !";
else
echo "n'existe pas";
DATEPHOTO=`identify -format "%[EXIF:Datetime]" $i | cut -f1 -d' ' `
ANNEE=`echo $DATEPHOTO | cut -f1 -d:`
MOIS=`echo $DATEPHOTO | cut -f2 -d:`
JOUR=`echo $DATEPHOTO | cut -f3 -d:`
REPDATE=$ANNEE" "$MOIS" "$JOUR
if [ ! -e "$REPDEST/$REPANNEE/$REPDATE/" ]
then
echo "Création du répertoire : $REPDATE"
mkdir "$REPDEST/$REPANNEE/$REPDATE"
fi
echo "Copie du fichier dans le répertoire : $REPDEST/$REPANNEE/$REPDATE/"
cp $i "$REPDEST/$REPANNEE/$REPDATE/$i"
fi
done
cd ..
done
# Fin de récuppération des fichiers
#echo "Retour au dossier :"
#cd $CHEMIN_ACTUELLE
#pwd
Il me restera plus qu'a chercher comment lancer automatiquement ce script lorsque je branche mon appareil photo.
Sinon, est il possible d'afficher un message d'alerte en bash. J'aimerai un équivalent de la fonction alert() en javascript ?
http://www.starbusiness.fr : jeux en ligne bientôt Massivement Multi Joueur. Gestion et Wargame dans un univers à la conquête de l'espace ...
Hors ligne
#11 Le 24/06/2010, à 23:36
- nesthib
Re : Comment recupperer les elements d'une date a partir une chaine
si ton appareil est toujours monté sous le même dossier tu peux utiliser inotifywait pour surveiller la création du point de montage
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne