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 02/05/2013, à 21:54

Flying-Fish

[Résolu] Trier ses photos par type d'appareil photo

Salut,

Voilà, comme indiqué dans le titre, j'aimerai pouvoir trier un grand nombre de photos (toutes en vrac dans un dossier unique) par type d'appareil photo.

Par exemple, faire en sorte que toutes les photos prises grâce à un Canon EOS aillent dans un dossier "Canon EOS", celles prises par un Sony Cyber-Shot dans un dossier "Sony Cyber-Shot" etc...

Y a-t-il un moyen de faire ça (logiciel, script...) ?

Merci par avance.

Fish

Dernière modification par Flying-Fish (Le 07/02/2014, à 14:38)


Dell Latitude 5480
Mint Xfce
5.15.0-84-generic x86_64
Xfce 4.18.1

Hors ligne

#2 Le 02/05/2013, à 22:19

toutafai

Re : [Résolu] Trier ses photos par type d'appareil photo

Bonsoir,

Peut etre en nommant les partitions des differentes carte mémoire de tes apn. Apres il suffirais de creer un point de montage pour ces partition pointant dans les dossiers qui vont bien.


Tombé dans l'informatique étant petit, j'en ai fait mon métier. Utilisateur d'Ubuntu depuis novembre 2006, actuellement sous 20.04 x64 (Que d'évolution
depuis Dapper Drake ! Ça rajeunit pas ^^^).

Hors ligne

#3 Le 02/05/2013, à 22:22

Flying-Fish

Re : [Résolu] Trier ses photos par type d'appareil photo

Pas bête mais j'pensais plus à un système ""après-coup" : je voudrais trier les photos qui malheureusement sont en vrac dans un seul gros dossier et qui s'accumulent depuis des années.

Peut-être avec une moulinette qui se servirait des données EXIF ?


Dell Latitude 5480
Mint Xfce
5.15.0-84-generic x86_64
Xfce 4.18.1

Hors ligne

#4 Le 02/05/2013, à 23:03

PI3RR3-29

Re : [Résolu] Trier ses photos par type d'appareil photo

bonsoir
la commande

 exiftool -U /chemin/image.jpg | grep Make

te donne l'APN utilisé (et si apres tu veux trier par objectif : change Make en Lens ID, etc)

Je pense qu'a partir de ca, tu peux creer un script bash assez facilement en testant tous les fichiers un à un et en les deplacent apres vers un autre dossier)

EDIT : change le Make en "Camera Model Name" si tu utilise une meme marque pour tous tes APN wink

Dernière modification par PI3RR3-29 (Le 02/05/2013, à 23:05)

Hors ligne

#5 Le 02/05/2013, à 23:05

Flying-Fish

Re : [Résolu] Trier ses photos par type d'appareil photo

Salut et merci.

Je suis un peu nul en scripts mais j'imagine qu'avec les commandes find, exiftool et mv on doit pouvoir y arriver ?


Dell Latitude 5480
Mint Xfce
5.15.0-84-generic x86_64
Xfce 4.18.1

Hors ligne

#6 Le 02/05/2013, à 23:12

PI3RR3-29

Re : [Résolu] Trier ses photos par type d'appareil photo

il te faudra aussi surement un mkdir (make directory) à un moment ou un autre (soit pour trier par APN par date soit pour trier par date par apn)

Si tu veux, je peux relechir a un script, meme si il risque d etre un peu lourd juste pour faire ca.

Hors ligne

#7 Le 02/05/2013, à 23:13

Flying-Fish

Re : [Résolu] Trier ses photos par type d'appareil photo

Euh ben ... j'suis pas contre un p'tit coup d'main.


Dell Latitude 5480
Mint Xfce
5.15.0-84-generic x86_64
Xfce 4.18.1

Hors ligne

#8 Le 02/05/2013, à 23:39

PI3RR3-29

Re : [Résolu] Trier ses photos par type d'appareil photo

voici un debut (non testé) :

#!/bin/bash
#########################################################################################
#   _______  ________  ______   _______   _______    ______        _______    _______   #
#  ||  __  \ ________  _____\\ ||  __  \ ||  __  \   _____\\       _______\  /  ____ |  #
#  || |  | |    ||          || || |  | | || |  | |        ||             ||  | |___| |  #
#  || |__| /    ||       ----| || |__| / || |__| /      ---|  ____       //  \_______|  #
#  ||------     ||       ----| ||------  ||------       ---|  ____     //           ||  #
#  ||        ___||___  _____|| ||   \\\  ||    \\\   _____||         //____   ______||  #
#  ||        ________  _____// ||    \\\ ||     \\\  _____//       //______   _______/  #
#########################################################################################
####################################MAI2013##############################################
#####################################CC-By###############################################
#####################################V1.1################################################
#########################################################################################


#Il faut changer "Modele 1" et "Modele 2" par le nom de modele de l'APN
#pour cela, executer la commande [ exiftool -U  chemin | grep "Camera Model Name" ]
#puis copier le nom a droite (attention a ne pas copier les espaces avant et apres ;) )

#on peut le faire pour autant d'APN que l'on veut en ajoutant des lignes (qui commencent par elif) et des dossiers

#il ne faut pas s'inquieter si il sort un message d erreur au debut en disant que le dossier MODELE1  existe deja

echo "veuillez entrer le chemin du dossier"
read -e chemin # entree semi-automatique

cd $chemin #on se place dans le repertoire
rename 's/\s+/_/g' * #on remplace les espaces de tous les noms de fichier par des underscore pour eviter les problemes
ls > listephotos.txt #on lit la liste des photos et on sauvegarde le resultat dans 1 fichier

mkdir MODELE1 #on cree les 2 dossiers : 1 par APN
mkdir MODELE2

while read line #tantqu'il y a une ligne a lire dans le fichier, on lit
do name=$(exiftool -U $line | grep "Camera Model Name")
        if  [ "$name" = "Camera Model Name               : MODELE1" ] ; then
                mv $line  MODELE1/

       elif  [ "$name" = "Camera Model Name               : MODELE2" ] ; then
                mv $line MODELE2/
        fi
done < listephotos.txt #on precise que la lecture est celle du fichier

rm listephotos.txt #on supprime le fichier

echo ""
echo "operations terminees"
echo ""
echo "Merci d'avoir utilise mon script"
echo "                                   PI3RR3-29"

il faut connaitre exactement le modele de l'apn : pour cela lance la commande sur des photos "exiftool -U chemin | grep "Camera Model Name"" et fait un Copier coller du nom a la place de MODELE1 partout ou il apparait.
Si t'as plus de 2 apn, tu copis la ligne 42/43 et tu cree de nouveaux dossier.


Je suis un peu crevé, donc je m'y repencherais demain

EDIT : voici un script qui fonctionne
EDIT2 : ajout de la commande

rename 's/\s+/_/g' *

pour les espaces

Dernière modification par PI3RR3-29 (Le 03/05/2013, à 14:16)

Hors ligne

#9 Le 03/05/2013, à 03:26

Flying-Fish

Re : [Résolu] Trier ses photos par type d'appareil photo

Hey, merci PI3RR3-29 pour le coup d'main. Je reviens du boulot, j'vais m'coucher mais demain je teste ça dès que j'me lève.

Fish


Dell Latitude 5480
Mint Xfce
5.15.0-84-generic x86_64
Xfce 4.18.1

Hors ligne

#10 Le 03/05/2013, à 06:31

pingouinux

Re : [Résolu] Trier ses photos par type d'appareil photo

Bonjour,
Voici une méthode pour avoir la liste des appareils photo utilisés :

cd /.../le_dossier_où_sont_les_photos
for i in *; do exif "$i" | grep 'Manufacturer\|Model' | cut -d\| -f 2 | paste - -;done | sort -u

Hors ligne

#11 Le 03/05/2013, à 10:16

PI3RR3-29

Re : [Résolu] Trier ses photos par type d'appareil photo

bonjour
Pingouinux, pourrais tu expliquer ton code s'il te plait ? (je ne reussis pas à le comprendre)

Hors ligne

#12 Le 03/05/2013, à 12:21

Flying-Fish

Re : [Résolu] Trier ses photos par type d'appareil photo

Salut à tous,

Merci pour votre aide.

@ Pingouinux : es-tu sûr de ta commande ? Chez moi elle ne renvoie rien.

exiftool -U chemin | grep "Camera Model Name"

, proposée par PI3RR3-29 semble lister les appareils.

@ PI3RR3-29 : pour l'instant, le script arrive à me créer des dossiers aux noms des modèles d'appareils photos mais il me répond :

Test.sh: ligne 15: Erreur de syntaxe près du symbole inattendu « done »
Test.sh: ligne 15: `done< listephotos.txt #on precise que la lecture est celle du fichier'

Fish


Dell Latitude 5480
Mint Xfce
5.15.0-84-generic x86_64
Xfce 4.18.1

Hors ligne

#13 Le 03/05/2013, à 13:00

PI3RR3-29

Re : [Résolu] Trier ses photos par type d'appareil photo

en effet, j'ai mis le "do" dans la variable alors qu'il aurait fallu le mettre devant.

Je change aussi quelques autres petits trucs au passage (et il marche maintenant bien chez moi).
J'edite mon autre message

edit : ca y est

Dernière modification par PI3RR3-29 (Le 03/05/2013, à 13:14)

Hors ligne

#14 Le 03/05/2013, à 13:39

Flying-Fish

Re : [Résolu] Trier ses photos par type d'appareil photo

Hey, merci PI3RR3-29.

Juste une petite question cependant. Quand tu écris

PI3RR3-29 a écrit :

puis copier le nom a droite (attention a ne pas copier les espaces

, si mon appareil apparait grâce à exiftool comme

Camera Model Name               : Canon EOS 300D DIGITAL

Est-ce qu'il faut que dans le script j'écrive "Canon EOS 300D DIGITAL" ou "CanonEOS300DDIGITAL" ou bien est-ce que juste "300D" suffit ?

Fish


Dell Latitude 5480
Mint Xfce
5.15.0-84-generic x86_64
Xfce 4.18.1

Hors ligne

#15 Le 03/05/2013, à 13:45

PI3RR3-29

Re : [Résolu] Trier ses photos par type d'appareil photo

c'est "Canon EOS 300D DIGITAL" qu'il faut copier (en faite, je parlais des espaces avant et apres).
(ou alors, pour ne pas t'embeter a faire attention aux espaces, tu copies la ligne "Camera Model Name               : Canon EOS 300D DIGITAL" et tu remplaces toute la ligne "Camera Model Name               : MODELE1")
Mais pour le dossier (lignes mkdir et mv) , tu peux remplacer juste "MODELE1" par "300D" tant que tu sais que c'est un Canon tongue (c'est juste que c'eetait plus simple a presenter ainsi et on comprend tout de suite sans explications)

edit : je reflechis actuellement a une v2 qui te rentrerais automatiquement les noms. Voudras tu que je la mette ?

Dernière modification par PI3RR3-29 (Le 03/05/2013, à 14:00)

Hors ligne

#16 Le 03/05/2013, à 14:05

Flying-Fish

Re : [Résolu] Trier ses photos par type d'appareil photo

Encore moi... (désolé)

ça me retourne :

File not found: AIRBUS
File not found: TOULOUSE
File not found: 1.jpg

lorsque le fichier photo contient des espaces (dans le cas présent AIRBUS TOULOUSE 1.jpg).

PI3RR3-29 a écrit :

edit : je reflechis actuellement a une v2 qui te rentrerais automatiquement les noms. Voudras tu que je la mette ?

Vi vi vi (comment dire non à une telle proposition ?) !!!

Dernière modification par Flying-Fish (Le 03/05/2013, à 14:06)


Dell Latitude 5480
Mint Xfce
5.15.0-84-generic x86_64
Xfce 4.18.1

Hors ligne

#17 Le 03/05/2013, à 14:14

PI3RR3-29

Re : [Résolu] Trier ses photos par type d'appareil photo

un espace dans un nom ? sacrilege !
le commande suivante devrait te changer tous les espaces par un _ et le script fonctionnera alors (car un prend les espaces pour un nouveau fichier a traiter et donc a la place de "AIRBUS TOULOUSE1.JPG" il te traitera les photos "AIRBUS" et "TOULOUSE1.JPG" et manque de chance, elles n existent pas).

(J'ajoute cette commande au script)

rename 's/\s+/_/g' *

Hors ligne

#18 Le 03/05/2013, à 14:33

Flying-Fish

Re : [Résolu] Trier ses photos par type d'appareil photo

Super excellent, ça marche !

Merci énormément PI3RR3-29 !

Alors certes, ça me crée un dossier "DIGITAL" et dedans 4 sous-dossiers "300D", "350D", "Canon" et "EOS" mais ce n'est pas très grave, en adaptant un peu, je devrais pouvoir arriver à mes fins !

Quoiqu'il en soit, encore merci beaucoup.

Fish


Dell Latitude 5480
Mint Xfce
5.15.0-84-generic x86_64
Xfce 4.18.1

Hors ligne

#19 Le 03/05/2013, à 14:38

PI3RR3-29

Re : [Résolu] Trier ses photos par type d'appareil photo

dr wink
tu as mis quoi comme "MODELE1" aux lignes "mkdir" et "mv" ?

Hors ligne

#20 Le 03/05/2013, à 14:43

Flying-Fish

Re : [Résolu] Trier ses photos par type d'appareil photo

Voici ton script mais avec mes modèles d'APN.

#!/bin/bash
#########################################################################################
#   _______  ________  ______   _______   _______    ______        _______    _______   #
#  ||  __  \ ________  _____\\ ||  __  \ ||  __  \   _____\\       _______\  /  ____ |  #
#  || |  | |    ||          || || |  | | || |  | |        ||             ||  | |___| |  #
#  || |__| /    ||       ----| || |__| / || |__| /      ---|  ____       //  \_______|  #
#  ||------     ||       ----| ||------  ||------       ---|  ____     //           ||  #
#  ||        ___||___  _____|| ||   \\\  ||    \\\   _____||         //____   ______||  #
#  ||        ________  _____// ||    \\\ ||     \\\  _____//       //______   _______/  #
#########################################################################################
####################################MAI2013##############################################
#####################################CC-By###############################################
#####################################V1.1################################################
#########################################################################################


#Il faut changer "Modele 1" et "Modele 2" par le nom de modele de l'APN
#pour cela, executer la commande [ exiftool -U  chemin | grep "Camera Model Name" ]
#puis copier le nom a droite (attention a ne pas copier les espaces avant et apres ;) )

#on peut le faire pour autant d'APN que l'on veut en ajoutant des lignes (qui commencent par elif) et des dossiers

#il ne faut pas s'inquieter si il sort un message d erreur au debut en disant que le dossier Canon EOS 300D DIGITAL  existe deja

echo "veuillez entrer le chemin du dossier"
read -e chemin # entree semi-automatique

cd $chemin #on se place dans le repertoire
rename 's/\s+/_/g' * #on remplace les espaces de tous les noms de fichier par des underscore pour eviter les problemes
ls > listephotos.txt #on lit la liste des photos et on sauvegarde le resultat dans 1 fichier

mkdir Canon EOS 300D DIGITAL #on cree les 2 dossiers : 1 par APN
mkdir Canon EOS 350D DIGITAL

while read line #tantqu'il y a une ligne a lire dans le fichier, on lit
do name=$(exiftool -U $line | grep "Camera Model Name")
        if  [ "$name" = "Camera Model Name               : Canon EOS 300D DIGITAL" ] ; then
                mv $line  Canon EOS 300D DIGITAL/

       elif  [ "$name" = "Camera Model Name               : Canon EOS 350D DIGITAL" ] ; then
                mv $line Canon EOS 350D DIGITAL/
        fi
done < listephotos.txt #on precise que la lecture est celle du fichier

rm listephotos.txt #on supprime le fichier

echo ""
echo "operations terminees"
echo ""
echo "Merci d'avoir utilise mon script"
echo "                                   PI3RR3-29"

Peut-être manque-t-il des guillemets ?

Fish


Dell Latitude 5480
Mint Xfce
5.15.0-84-generic x86_64
Xfce 4.18.1

Hors ligne

#21 Le 03/05/2013, à 14:44

PI3RR3-29

Re : [Résolu] Trier ses photos par type d'appareil photo

tu as trouvé toi meme l'erreur wink
( mkdir "Canon EOS 300D DIGITAL" et de meme pour l'autre, mais enleve ces espaces et mets des _ a la place)

et sinon, met juste 300D et 350D : c'est aussi simple

Dernière modification par PI3RR3-29 (Le 03/05/2013, à 14:46)

Hors ligne

#22 Le 03/05/2013, à 14:57

Flying-Fish

Re : [Résolu] Trier ses photos par type d'appareil photo

Aaaaah, faut que je parte. Mais dès que je reviens je teste ça et te tiens au courant.

Merci encore.

Fish


Dell Latitude 5480
Mint Xfce
5.15.0-84-generic x86_64
Xfce 4.18.1

Hors ligne

#23 Le 03/05/2013, à 17:11

pingouinux

Re : [Résolu] Trier ses photos par type d'appareil photo

PI3RR3-29   #11 a écrit :

Pingouinux, pourrais tu expliquer ton code s'il te plait ? (je ne reussis pas à le comprendre)

for i in *; do exif "$i" | grep 'Manufacturer\|Model' | cut -d\| -f 2 | paste - -;done | sort -u

exif ma_photo.jpg fournit un certain nombre de renseignements dont ces deux lignes :

Manufacturer        |SONY
Model               |DSC-W100

qui sont récupérées par le grep
exif ma_photo.jpg | grep 'Manufacturer\|Model' | cut -d\| -f 2

SONY
DSC-W100

récupère la seconde colonne (colonnes séparées par |)
paste - - récupère deux lignes consécutives sur l'entrée standard, et les affiche côte-à-côte (séparées par une tabulation)
sort -u ne garde qu'un exemplaire de chaque modèle

Flying-Fish   #12 a écrit :

@ Pingouinux : es-tu sûr de ta commande ? Chez moi elle ne renvoie rien.

J'ai une version en anglais. Pour la version française, il faut remplacer Manufacturer par Constructeur, et Model par Modèle.
Voici un script (version anglaise) qui crée les répertoires et déplace les photos (même si les noms contiennent des espaces) :

$ cat deplacement_photos.sh
#!/bin/bash

for i in "$@"; do
   [ ! -f "$i" ] && continue
   manumod=$(exif "$i" 2>/dev/null| grep 'Manufacturer\|Model' | cut -d\| -f 2 | paste - - | sort -u)
   [ "$manumod" ] || continue
   [ -d "$manumod" ] || mkdir -p "$manumod"
   mv -i "$i" "$manumod"
done 

Pour le lancer :

cd /.../le_dossier_où_sont_les_photos
/.../chemin_du_script/deplacement_photos.sh *

Hors ligne

#24 Le 03/05/2013, à 22:24

Flying-Fish

Re : [Résolu] Trier ses photos par type d'appareil photo

Hola, n'en jetez plus, je me retrouve avec 2 excellents scripts qui fonctionnent très bien, c'est largement assez !

Merci donc à vous 2 pour votre aide et votre patience.

Bye

Fish


Dell Latitude 5480
Mint Xfce
5.15.0-84-generic x86_64
Xfce 4.18.1

Hors ligne

#25 Le 03/05/2013, à 23:04

PI3RR3-29

Re : [Résolu] Trier ses photos par type d'appareil photo

merci Pingouinux pour cette explication.

voici la v2 (pas tout a fait finie, mais qui fonctionne) et qui reprend un bout du code de Pingouinux (je ne sais pas si tu vas l'utilisé, mais comme je l'ai fini, autant le partager) :

#!/bin/bash

#########################################################################################
#   _______  ________  ______   _______   _______    ______        _______    _______   #
#  ||  __  \ ________  _____\\ ||  __  \ ||  __  \   _____\\       _______\  /  ____ |  #
#  || |  | |    ||          || || |  | | || |  | |        ||             ||  | |___| |  #
#  || |__| /    ||       ----| || |__| / || |__| /      ---|  ____       //  \_______|  #
#  ||------     ||       ----| ||------  ||------       ---|  ____     //           ||  #
#  ||        ___||___  _____|| ||   \\\  ||    \\\   _____||         //____   ______||  #
#  ||        ________  _____// ||    \\\ ||     \\\  _____//       //______   _______/  #
#########################################################################################
####################################MAI2013##############################################
#####################################CC-By###############################################
#####################################V2.0################################################
#########################################################################################


function liste {
for j in *.*
	do test=$(exiftool "$j" | grep 'Model' | cut -d\: -f 2 | paste -)
	# si on veux aussi la marque : for j in *; do exiftool "$j" | grep 'Make\|Model' | cut -d\: -f 2 | paste - -;done | sort -u
		test=$(echo $test | sed 's/ /_/g')#on remplace les espaces par des underscores pour toutes les images
		if [ "$test" = "$line" ] ; then
			mv "$j" "$line"
			echo $j "fait"
		fi
	done
}



echo "veuillez entrer le chemin"
read -e chemin
cd $chemin

rename 's/\s+/_/g' *
echo "" > listeapn.txt

echo "Debut de l'analyse des fichiers"
for i in *.* #pour tous les fichiers du dossier ayant un point dans leur nom
	do exiftool "$i" | grep 'Model' | cut -d\: -f 2 | paste - #regarder le modele de l'apn, ne garder que ce resultat (couper/coller)
	done | sort -u >> listeapn.txt #ne garder qu'un exemplaire par type d apn et le mettre dans un fichier
echo "Analyse des fichiers fini"

while read line #lire chaque ligne du fichier (cf le done ci dessous)
	do line=$(echo $line | sed 's/ /_/g') #on supprime les espaces des noms d apn
	
		if [ -d "$line" ] ; then #si il y a un dossier avec ce nom d apn
			liste #appel a la fonction
		elif [ "$line" = "" ] ; then #si il y a un dossier avec un nom vide (arrive si il y a deja un dossier)
			echo ""
		else #sinon : cad qu'il n'y a pas de dossier avec ce nom d apn
			mkdir "$line" #on cree le dossier
			liste
		fi
	done < listeapn.txt #c'est dans ce fichier que l'on lit les lignes

rm listeapn.txt

echo "Merci d'avoir utilise mon script"

Hors ligne