Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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.

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 big_smile

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 wink

Une fois que tu n'auras plus de questions, pense à passer ce thread en résolu wink

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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne