J'ai récupéré des images d'une partition perdue et je dois les trier ou les mettre dans un dossier avant la date de création dans les données EXIF de chaque image.
J'ai installé digiKam et shotwell mais je n'ai pas trouvé le moyen de le faire avec les options.
Quelqu'un peut-il m'expliquer comment procéder avec l'un de ces programmes ou par tout autre moyen?
Ma solution préférée consiste à définir la date du fichier de la même manière que la date de la photo exif. Ce faisant, vous pouvez trier les fichiers à l’aide de n’importe quel outil d’explorateur de fichiers.
apt-get install jhead
)jhead -ft *
. Cela va définir la date du fichier dans le système de fichiers avec la date de création des métadonnées exifJe recommande d'utiliser exiftool . Vous pouvez l'installer avec
Sudo apt install exiftool
Voici un exemple de commande qui renomme les fichiers en fonction de la date de création au format AAAAMMJJ et ajoute un numéro de séquence à la fin.
exiftool '-filename<CreateDate' -d %Y%m%d%%-.4nc.%%le -r
Et voici un exemple de commande qui déplace image.jpg
dans un répertoire avec sa date de création comme nom, au format 'AAAA-MM-JJ'.
exiftool -d %Y-%m-%d "-directory<datetimeoriginal" image.jpg
Il existe d'autres exemples de commandes dans la documentation: https://sno.phy.queensu.ca/~phil/exiftool/filename.html
Un excellent outil est Rapid Photo Downloader
Ajout du PPA
Sudo apt-add-repository ppa:dlynch3/ppa
Mise à jour et installation
Sudo apt-get update
Sudo apt-get install rapid-photo-downloader
Utilisez votre "partition perdue" comme source d'entrée et configurez le chemin/nom de fichier cible en fonction de vos données exif dans Rapid Photo Downloader
Utilisation la plus simple: jhead -n%Y/%m/%d/%Y%m%d%H%M /Destination/*.jpg
Il va trier, déplacer et renommer tous vos fichiers JPG du répertoire actuel en une structure de répertoires Nice avec des noms de fichiers uniques /Year/Month/Day/YearMonthDayHourMinute.jpg
Cela ne fonctionne que sur les fichiers * .jpg, pas sur les fichiers RAW
Installez le traitement par lot Phatch Photo. Parmi les actions prédéfinies, sélectionnez celle qui renomme les fichiers avec la date exif.
C'est le code que j'utilise. Il renomme les photos en ajoutant YYYYMMDD_originalname.jpg
#! /bin/bash
shopt -s globstar || exit
for PIC in **
do
# look only for jpg
if [[ "$PIC" =~ \.JPG$ ]] || [[ "$PIC" =~ \.jpg$ ]]; then
# ignore jpg that have 8 numbers at beginning followed by _ or after IMG_ or P_ and followed by _ (already date stamped)
if [[ "$PIC" =~ [[:digit:]]{8}_.*$ ]] || [[ "$PIC" =~ IMG_[[:digit:]]{8}_.*$] ]] || [[ "$PIC" =~ P_[[:digit:]]{8}_.*$] ]]; then
:
else
# get the date and time from the tag
DATE=$(exiftool -p '$DateTimeOriginal' "$PIC" | sed 's/[: ]//g')
echo "file_$PIC"
# customize date, in this case eliminate the time, getting only the date in 8 numbers and adding _
DATEMOD2=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
echo "datemod2_$DATEMOD2"
# check if DateTimeOriginal was present
if [[ "$PIC" == "$DATEMOD2$PIC" ]];then
# as DateTimeOriginal is not present try with HistoryWhen
DATE=$(exiftool -p '$HistoryWhen' "$PIC" | sed 's/[: ]//g')
DATEMOD2B=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
echo "datemod2B_$DATEMOD2B"
# check if HistoryWhen is present
if [[ "$PIC" == "$DATEMOD2B$PIC" ]];then
# nor the tag DateTimeOriginal, nor HistoryWhen present
echo "skip"
else
# this will be done
echo "mv -i "$PIC" $(dirname "$PIC")/"$DATEMOD2B""$PIC""
#uncomment if you like it
#mv -i "$PIC" $(dirname "$PIC")/"$DATEMOD2B""$PIC"
fi
else
# this will be done
echo "mv -i "$PIC" $(dirname "$PIC")/"$DATEMOD2""$PIC""
#uncomment if you like it
#mv -i "$PIC" $(dirname "$PIC")/"$DATEMOD2""$PIC"
fi
fi
fi
done
Basé sur https://www.tuxradar.com/answers/4 , https://mikebeach.org/2011/12/17/how-to-retrieve-exif-data -de-la-ligne-de-commande-sous-Ubuntu-linux /
Voir aussi, http://davehope.co.uk/Blog/sorting-your-photos-with-bash/
MODIFIER. Dans cette modification, la date dans la balise est transmise au nom ainsi qu’à l’attribut Date avec touch. De plus, si ces balises n'existent pas, la balise de date de modification est transmise au nom du fichier.
#! /bin/bash
shopt -s globstar || exit
for PIC in **
do
# look only for jpg
if [[ "$PIC" =~ \.JPG$ ]] || [[ "$PIC" =~ \.jpg$ ]]; then
echo "file_$PIC"
# get the date and time from the tag DateTimeOriginal
DATE=$(exiftool -p '$DateTimeOriginal' "$PIC" | sed 's/[: ]//g')
LONGDATE=$(echo $DATE | sed -e 's/^\(.\{12\}\).*/\1/')
# check if DateTimeOriginal is 0000... OR empty
if [[ "$LONGDATE" != "000000000000" ]] && [[ -n "$LONGDATE" ]]; then
echo "datetimeoriginal_$LONGDATE"
# modify the attribute date with the info in the tag date
touch -t $LONGDATE "$PIC"
# customize date, in this case eliminate the time, getting only the date in 8 numbers and adding _
DATEMOD2=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
echo "datemod2_$DATEMOD2"
# skip renaming if
# 8 numbers at beginning followed by _ or after IMG_ or P_ and followed by _ (already date stamped)
if [[ "$PIC" =~ [[:digit:]]{8}_.*$ ]] || [[ "$PIC" =~ IMG_[[:digit:]]{8}_.*$] ]] || [[ "$PIC" =~ P_[[:digit:]]{8}_.*$] ]]; then
:
else
# this will be done
filename=$(basename "$PIC")
echo "$filename"
echo "mv -i \""$PIC"\" \""$(dirname "$PIC")"/"$DATEMOD2""$filename"\""
#uncomment if you like it
mv -i "$PIC" "$(dirname "$PIC")/$DATEMOD2$filename"
fi
else
# get the date and time from the tag HistoryWhen
DATE=$(exiftool -p '$HistoryWhen' "$PIC" | sed 's/[: ]//g')
LONGDATE=$(echo $DATE | sed -e 's/^\(.\{12\}\).*/\1/')
# check if Historywhen is 0000... or empty
if [[ "$LONGDATE" != "000000000000" ]] && [[ -n "$LONGDATE" ]]; then
echo "historywhentag_$LONGDATE"
touch -t $LONGDATE "$PIC"
DATEMOD2B=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
echo "datemod2B_$DATEMOD2B"
if [[ "$PIC" =~ [[:digit:]]{8}_.*$ ]] || [[ "$PIC" =~ IMG_[[:digit:]]{8}_.*$] ]] || [[ "$PIC" =~ P_[[:digit:]]{8}_.*$] ]]; then
:
else
# this will be done
filename=$(basename "$PIC")
echo "$filename"
echo "mv -i \""$PIC"\" \""$(dirname "$PIC")"/"$DATEMOD2B""$filename"\""
#uncomment if you like it
mv -i "$PIC" "$(dirname "$PIC")/$DATEMOD2B$filename"
fi
else
# get the date and time from the tag tag filemodifydate
DATE=$(exiftool -p '$filemodifydate' "$PIC" | sed 's/[: ]//g')
LONGDATE=$(echo $DATE | sed -e 's/^\(.\{12\}\).*/\1/')
# check if filemodifydate is 0000... or empty
if [[ "$LONGDATE" != "000000000000" ]] && [[ -n "$LONGDATE" ]]; then
#echo "filemodifydatetag_$LONGDATE"
#touch -t $LONGDATE "$PIC"
DATEMOD2C=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
echo "datemod2C_$DATEMOD2C"
if [[ "$PIC" =~ [[:digit:]]{8}_.*$ ]] || [[ "$PIC" =~ IMG_[[:digit:]]{8}_.*$] ]] || [[ "$PIC" =~ P_[[:digit:]]{8}_.*$] ]]; then
:
else
# this will be done
filename=$(basename "$PIC")
echo "$filename"
echo "mv -i \""$PIC"\" \""$(dirname "$PIC")"/"$DATEMOD2C""$filename"\""
#uncomment if you like it
mv -i "$PIC" "$(dirname "$PIC")/$DATEMOD2C$filename"
fi
else
echo "Error, NO date available"
fi
fi
fi
fi
done