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 26/07/2021, à 17:06

JujuLand

[Résolu] Erreur sed >> Scripts exif2date et colors

Bonjour,

J'ai un remplacement de chaîne à faire dans un fichier, voici comment je procède:

previous=$(cat $HOME/.wine/user.reg | grep 'cwd')
echo $previous      => "cwd"="Z:\\home\\alain\\Bureau\\transfert\\Images\\Divers"
now=$(pwd|sed 's|/|\\\\|g')
echo $now           => \\home\\alain\\Bureau\\transfert\\Images\\Blagues
new='"cwd"="Z:'$now'"'
echo $new           => "cwd"="Z:\\home\\alain\\Bureau\\transfert\\Images\\Blagues"
sed -i -e 's|${previous}|${new}' $HOME/.wine/user.reg
                    => sed: -e expression n°1, caractère 20: commande `s' inachevée

Où est-ce que je merde ?

Merci
A+

Dernière modification par JujuLand (Le 11/08/2021, à 10:03)


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#2 Le 26/07/2021, à 17:17

JujuLand

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Bon, je viens de trouver qu'il manquait la portée du sed, et avec |g', plus d'erreur, mais pas re remplacement dans le fichier ...

Le meilleure solution serait de ne pas utiliser 'Exif Pilote' (pour Windows) et d'utiliser exiv2 par exemple (ou une commande en mode terminal), mais je ne comprend pas trop la commande exiv2, et de plus, il ne semble pas possible de créer un exif pour une image qui n'en dispose pas encore, alors que c'est possible avec Exif Pilot ...

Une idée ?


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#3 Le 26/07/2021, à 17:50

MicP

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Bonjour

Je ne sais pas du tout ce que contient le fichier $HOME/.wine/user.reg avant la modification
ni ce que tu voudrais qu'il contienne une fois que la modification par la commande sed sera faite,
ni l'utilité des commandes echo
ni le rapport entre ces lignes de commande(s) et l'extrait suivant de ton message #2 :

JujuLand a écrit :

… Le meilleure solution serait de ne pas utiliser 'Exif Pilote' (pour Windows) et d'utiliser exiv2 par exemple (ou une commande en mode terminal), mais je ne comprend pas trop la commande exiv2, et de plus, il ne semble pas possible de créer un exif pour une image qui n'en dispose pas encore, alors que c'est possible avec Exif Pilot ...

=======
En attendant, je te propose les quelques reformulations suivantes des lignes de de commande(s) de ton script
(en espérant qu'il s'agit bien d'un script qui sera exécuté par l'interpréteur de commandes bash) :

previous=$(cat $HOME/.wine/user.reg | grep 'cwd')

à remplacer par :

previous="$(grep cwd $HOME/.wine/user.reg)"


echo $previous      => "cwd"="Z:\\home\\alain\\Bureau\\transfert\\Images\\Divers"

à remplacer par :

echo "$previous      => cwd=Z:\\home\\alain\\Bureau\\transfert\\Images\\Divers"

now=$(pwd|sed 's|/|\\\\|g')

à remplacer par :

now="${PWD//\//\\\\}"

echo $now           => \\home\\alain\\Bureau\\transfert\\Images\\Blagues

à remplacer par :

echo "$now           => \\home\\alain\\Bureau\\transfert\\Images\\Blagues"

new='"cwd"="Z:'$now'"'

à remplacer par :

new="cwd=Z:$now"

echo $new           => "cwd"="Z:\\home\\alain\\Bureau\\transfert\\Images\\Blagues"

à remplacer par :

echo "$new           => cwd=Z:\\home\\alain\\Bureau\\transfert\\Images\\Blagues"

sed -i -e 's|${previous}|${new}|g' $HOME/.wine/user.reg

à remplacer par :

sed -i "s|${previous}|${new}|g" $HOME/.wine/user.reg

ou bien, si tu veux créer une sauvegarde du fichier à modifier, au cas où tu ne serait pas sûr que ça fonctionne du premier coup :

sed -i.sauv "s|${previous}|${new}|g" $HOME/.wine/user.reg

ce qui va créer, avant modification, une copie de sauvegarde du fichier $HOME/.wine/user.reg qui sera nommée $HOME/.wine/user.reg.sauv
et qui fera en même temps la modification dans le fichier $HOME/.wine/user.reg.sauv
Ce qui fait que tu pourras toujours revenir "en arrière" en supprimant le fichier modifié et en renommant $HOME/.wine/user.reg.sauv en $HOME/.wine/user.reg

Dernière modification par MicP (Le 26/07/2021, à 19:40)

Hors ligne

#4 Le 26/07/2021, à 19:36

JujuLand

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

MicP a écrit :

Je ne sais pas du tout ce que contient le fichier $HOME/.wine/user.reg avant la modification

C'est le fichier reg de wine
Il contient notamment ce qui est dans la variable previous
"cwd"="Z:\\home\\alain\\Bureau\\transfert\\Images\\Divers"
avec les doubles-quotes
et donc now :
"cwd"="Z:\\home\\alain\\Bureau\\transfert\\Images\\Blagues"

MicP a écrit :

echo "$previous      => cwd=Z:\\home\\alain\\Bureau\\transfert\\Images\\Divers"

En fait, j'ai simplement fait figuré le retour de la commande echo $previous sur la même ligne dans mon post et donc ma commande est tout simplement : echo $previous
Idem pour les autres lignes où figurent les => ...

MicP a écrit :

new="cwd=Z:$now"

Comme dit us haut, les doubles quotes sont dans le fichier user.rsg, et il est donc nécessaire de les avoir, d'où la quote et la double quote.

Comme la chaîne à modifier concerne le chemin, en ne remplaçant pas la ligne complête, mais juste le chemin, ça pourrait le faire, car je me demande si ce n'est pas à cause des quotes et doubles quotes que ça coince ...

A+


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#5 Le 26/07/2021, à 20:06

MicP

Re : [Résolu] Erreur sed >> Scripts exif2date et colors


…Il contient notamment ce qui est dans la variable previous
"cwd"="Z:\\home\\alain\\Bureau\\transfert\\Images\\Divers"

Est-ce qu'il contient bien la ligne qui est ci-dessus ?
ou alors est-ce qu'il contient :

"cwd"="Z:\home\alain\Bureau\transfert\Images\Divers"

=======
Est-ce tu es sûr qu'il n'y a aucune autre ligne dans le fichier $HOME/.wine/user.reg qui pourrait un jour contenir,
dans un mot de la ligne, la suite consécutives des trois lettres suivantes : cwd
(comme par exemple dans un nom de fichier ou de répertoire, ou dans une ligne commentée) ?
Sinon, ce seront toutes les lignes du fichier $HOME/.wine/user.reg
dans lesquelles sera trouvé ce motif de recherche qui seront remplacées par une ligne contenant:
"cwd"="Z:\\home\\alain\\Bureau\\transfert\\Images\\Blagues"

=======
Ça serait bien d'avoir un copié/collé du contenu intégral du fichier avant modification
et une autre copie du fichier après modification,
comme ça, on pourrait faire directement des essais.

Dernière modification par MicP (Le 26/07/2021, à 20:33)

Hors ligne

#6 Le 26/07/2021, à 21:01

JujuLand

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Voici ce qu'il contient :

[Software\\Two Pilots\\Exif Pilot] 1627319764
"cwd"="Z:\\home\\alain\\Bureau\\transfert\\Images\\Divers"

Oui, c'est la seule occurence de "cwd"
Car j'utilise très peu de programmes windows avec wine, je préfère rester en linux ...

MicP a écrit :

ni le rapport entre ces lignes de commande(s) et l'extrait suivant de ton message #2 :

JujuLand a écrit :

… Le meilleure solution serait de ne pas utiliser 'Exif Pilote' (pour Windows) et d'utiliser exiv2 par exemple (ou une commande en mode terminal), mais je ne comprend pas trop la commande exiv2, et de plus, il ne semble pas possible de créer un exif pour une image qui n'en dispose pas encore, alors que c'est possible avec Exif Pilot ...

J'utilise 'Exif Pilot' car je n'ai pas trouvé d'outils linux qui permette de créer un exif pour une image qui n'en n'a pas, ce que permet ce programme windows. Si je veux tripatouiller user.reg, c'est pour que le programme ouvre sur le bon répertoire. Le répertoire est mémorisé après utilisation dans le registre utilisateur, et c'est un peu génant.

Donc, si quelqu'un connait un outil linux qui fasse ça, et qui en plus serait en mode ligne de commande, je serai ravi ... Je n'ai pas trouvé comment faire avec exiv2, par ailleurs, son utilisation me parait compliqué ...

A+

Dernière modification par JujuLand (Le 26/07/2021, à 21:12)


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#7 Le 26/07/2021, à 21:10

pingouinux

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Bonsoir,
Est-ce que ceci pourrait convenir ?

sed '/"cwd"/s/:\\\\.*/'":${PWD//\//\\\\\\\\}"'"/' "$HOME/.wine/user.reg"

Ajouter -i si c'est bon.

Édité : Correction

Dernière modification par pingouinux (Le 26/07/2021, à 21:14)

Hors ligne

#8 Le 26/07/2021, à 21:45

MicP

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Oui,
et pour éviter que la chaîne de caractères :

"cwd"

puisse être trouvée ailleurs qu'en début de ligne
et lui faire rechercher, en début de ligne, le motif encore plus strict :

"cwd"="

qui sera suivit de n'importe quel caractère
et dont la ligne se termine par un caractère apostrophe :

sed '/^"cwd"=".*"$/s/:\\\\.*/'":${PWD//\//\\\\\\\\}"'"/' "$HOME/.wine/user.reg"

=======

Dans son message #6, JujuLand a écrit :

… je n'ai pas trouvé d'outils linux qui permette de créer un exif pour une image qui n'en n'a pas, …
…un outil linux qui fasse ça, et qui en plus serait en mode ligne de commande…

Pour ajouter des métadonnées à un fichier image qui n'en a pas encore,
il y a la commande exiftool qui est dans le paquetage libimage-exiftool-perl

sudo apt install libimage-exiftool-perl

Une fois le paquetage installé, je peux ajouter des metadata dans mon fichier image qui n'en avait pas encore :

exiftool -Comment="Mon commentaire ajouté dans des nouvelles données exif" ~/Images/MonImageÀcommenter.png

Voir :How to add metadata to digital pictures from the command line

Dernière modification par MicP (Le 27/07/2021, à 01:58)

Hors ligne

#9 Le 27/07/2021, à 13:21

JujuLand

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Bon, ta ligne de commande fonctionne nickel :

# MISE A JOUR DE "cwd" DANS user.reg
sed '/^"cwd"=".*"$/s/:\\\\.*/'":${PWD//\//\\\\\\\\}"'"/' "$HOME/.wine/user.reg" > maj
cp maj ~/.wine/user.reg
rm maj

Maintenant, j'avais essayé exiftool, mais je ne voyais pas la date ... en fait il la met dans XMP, avec le nom ModifyDate et pas dand DateTime:

alain@Gramps-JujuLand2:~/Bureau/transfert/Images/Blagues$ exiftool -DateTime="2017-09-21 18:10:05" IMG_1360.JPG
    1 image files updated

XMP Exif
    xmp:ModifyDate           2017-09-21T18:10:05

Mais j'ai eu du mal à lire le paramètre ensuite:

date=$(identify -format "%[XMP:ModifyDate]" "$fichier"| cut -f1,2,3,4,5| awk -F ":" '{print $1"-"$2"-"$3":"$4":"$5}')
echo date=[$date]
=> date=[]

J'ai trouvé la date en lançant :

identify -verbose IMG_1367.JPG
Image: IMG_1367.JPG
  Format: JPEG (Joint Photographic Experts Group JFIF format)
  Mime type: image/jpeg
...
  Properties:
    date:create: 2021-07-27T11:46:42+02:00
    date:modify: 2021-07-27T11:46:42+02:00
...
    tiff:DateTime: 2017-09-21T18:10:05
  Profiles:
...

A+


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#10 Le 27/07/2021, à 14:30

erresse

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

JujuLand a écrit :

J'utilise 'Exif Pilot' car je n'ai pas trouvé d'outils linux qui permette de créer un exif pour une image qui n'en n'a pas, ce que permet ce programme windows. Si je veux tripatouiller user.reg, c'est pour que le programme ouvre sur le bon répertoire. Le répertoire est mémorisé après utilisation dans le registre utilisateur, et c'est un peu génant.

Donc, si quelqu'un connait un outil linux qui fasse ça, et qui en plus serait en mode ligne de commande, je serai ravi ... Je n'ai pas trouvé comment faire avec exiv2, par ailleurs, son utilisation me parait compliqué ...

Salut,
Utilise "jhead" en ligne de commande qui fait ça (et bien d'autres choses) très bien...


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#11 Le 27/07/2021, à 20:58

JujuLand

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Extrait du man :

There is also no way to create minimal exif headers

Donc pas utilisable pour des images sans entête exif. A voir cette option -mkexit que je viens de trouver.

Pour le reste, il semble pas mal et permet d'éviter l'utilisation de la commande touch, mais il faut voir s'il est capable de trouver la date dans tous les cas :
   - exif:DateTime
   - tiff:DateTime
   - exif:DateCreation

A+

Dernière modification par JujuLand (Le 27/07/2021, à 21:00)


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#12 Le 28/07/2021, à 10:11

MicP

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Bonjour

JujuLand a écrit :

Extrait du man :

There is also no way to create minimal exif headers

Donc pas utilisable pour des images sans entête exif. A voir cette option -mkexit que je viens de trouver.

Je suppose que tu cites un extrait des pages man mais de quelle commande s'agit-il ?

=======
Pourquoi ne pas utiliser la commande exiftool pour créer des métadonnées exif dans un fichier qui n'en aurait pas ?

Hors ligne

#13 Le 28/07/2021, à 18:04

JujuLand

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Effectivement, exiftool permet de créer de metadonnees, et je viens de faire l'essai et ça crée bien une structure exif (??) alors qu'elle n'existe pas déjà ...
Elle crée une metadonnée xmp:ModifyDate au format légèrement différent de ce qu'on peut trouver dans les exifs

A+


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#14 Le 28/07/2021, à 21:48

MicP

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Dans son message #9, JujuLand a écrit :

Bon, ta ligne de commande fonctionne nickel :

# MISE A JOUR DE "cwd" DANS user.reg
sed '/^"cwd"=".*"$/s/:\\\\.*/'":${PWD//\//\\\\\\\\}"'"/' "$HOME/.wine/user.reg" > maj
cp maj ~/.wine/user.reg
rm maj

Tu peux remplacer ces trois lignes de commande
par :

# MISE A JOUR DE "cwd" DANS user.reg
sed -i '/^"cwd"=".*"$/s/:\\\\.*/'":${PWD//\//\\\\\\\\}"'"/' "$HOME/.wine/user.reg" 

=======

JujuLand a écrit :

…Elle crée une metadonnée xmp:ModifyDate au format légèrement différent de ce qu'on peut trouver dans les exifs

La page Wikipedia est assez bien faite à ce sujet : Wikipedia -> Exchangeable image file format

et comme souvent, la version en anglais est plus détaillée : Wikipedia -> EXIF

Et bien sur il faut pas hésiter à investir un peu de temps
en lisant la page man de la commande exiftool

man exiftool

Dernière modification par MicP (Le 28/07/2021, à 22:03)

Hors ligne

#15 Le 31/07/2021, à 23:14

JujuLand

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Bon, j'ai fait quelques essais, et s'ils sont dans l'ensemble assez concluants, j'ai toutefois, j'ai un soucis avec les fichiers png.
Voici le script que je suis en train de faire pour mettre à jour les dates de fichier depuis les dates exif:

#!/bin/bash

version=1.10
datvers=2021-07-31

if [ "x${gYel}" == "x" ];then
   export gRed='\033[1;31m'
   export gGre='\033[1;32m'
   export gYel='\033[1;33m'
   export gBlu='\033[1;34m'
   export gMag='\033[1;35m'
   export gCya='\033[1;36m'
   export gWhi='\033[1;37m'
   export noColor='\033[0m'
   export mup='\033[0A'
fi

if [ "$1" == "-v" ];then
   echo -e "ii\texif2date\t$version\t$datvers"
   exit
elif [ "$1" == "-h" ];then
   clear
   echo " "
   echo -e "${gYel}                    exif2date ${gGre}v${version} ${gMag}${datvers}"
   echo ""
   echo -e "${gGre}1)${gYel} Remplacer la date du fichier par la date exif"
   echo -e "${gGre}2)${gMag} Remplacer la date exif 0000-00-00 00:00:00 par une date correcte"
   echo -e "      ${fMag}- soit par une date à saisir puis remplacer la date fichier"
   echo -e "      - soit par la date fichier"
   echo -e "${gGre}3)${gGre} Créer la date exif"  
   echo -e "      ${fGre}- soit une date à saisir puis remplacer la date fichier"
   echo -e "      - soit la date fichier${noColor}"
   echo " "
   exit
elif [ "$1" == "-w" ];then
   export pilot="Oui"
fi

echo -e "${gYel}Mise à jour des dates des images de ${gGre}$(pwd)${noColor}"
echo ""
echo "Mise à jour des dates des images de $(pwd)" > tridate.log
echo "" >>tridate.log

# This script uses 'Exif Pilot' for Windows to add or correct missing or bad dates
# Just set the variable containing the Exif Pilot program location in the concerned lines (62, 85)
# MISE A JOUR DE "cwd" DANS user.reg
if [ "$pilot" == "Oui" ];then
   if [ $(locate -b ExifPilot.exe|wc -l) == 1 ];then
      sed -i '/^"cwd"=".*"$/s/:\\\\.*/'":${PWD//\//\\\\\\\\}"'"/' "$HOME/.wine/user.reg"
   else
      echo -e "${gRed}Exif Pilot n'est pas installé ..."
      echo -e "${gYel}Téléchargez-le: ${gGre}https://www.two-pilots.com/colorpilot.com/load/exif.exe"
      echo -e "${gMag}... et installez-le !!!${noColor}"
      echo " "
      exit
   fi
fi

cles=("EXIF:DateTimeOriginal" "EXIF:DateTime" "TIFF:DateCreation" "tiff:DateTime")
exts=("PNG" "png" "JPG" "jpg" "jpeg")

for ext in ${exts[@]}; do
    for fichier in *.${ext}; do
        if [ "${fichier}" != "*.${ext}" ]; then
           for cle in ${cles[@]}; do
               date=$(identify -format "%[${cle}]" "${fichier}"| cut -f1,2,3,4,5| awk -F ":" '{print $1"-"$2"-"$3":"$4":"$5}')
               date=$(echo ${date}|sed 's|T| |1')
               if [ "x${date}" != "x" ]; then
                  case ${date} in
                       "0000-00-00 00:00:00")
                           if [ "$pilot" == "Oui" ];then
                              env WINEPREFIX="$HOME/.wine" wine E:\\Program\ Files\\Exif\ Pilot\\ExifPilot.exe 2>/dev/null
                              date=$(identify -format "%[EXIF:DateTime]" "${fichier}"| cut -f1,2,3,4,5| awk -F ":" '{print $1"-"$2"-"$3":"$4":"$5}')
                           else
                              date=$(stat "${fichier}"|grep Modif| cut -f1,2,3|awk -F " " '{print $2" "$3}'|cut -f1,2|awk -F "." '{print $1}')
                              echo -e "${fichier} : "0000-00-00 00:00:00" , ${gMag}${date}${gRed}"
                              echo -e "Modifier ${gGre}o${noColor}/${gYel}N${gGre} (non par défaut)${noColor}"
                              read what
                              if [[ "${what}" == "O" || "${what}" == "o" ]]; then 
                                 read date
                                 exiftool -DateTime="${date}" "${fichier}"
                              fi
                           fi
                           touch -d "${date}" "${fichier}"
                           echo -e "${mup}${mup}${gYel}${fichier} ${gMag}=> ${gGre}${date}${noColor}" ;;
                       *)
                           fdate=$(stat "${fichier}"|grep Modif| cut -f1,2,3|awk -F " " '{print $2" "$3}'|cut -f1,2|awk -F "." '{print $1}')
                           touch -d "${date}" "${fichier}"
                           if [ "${fdate}" == "${date}" ]; then
                              echo -e "${gYel}${fichier} ${gMag}== ${gGre}${date}${noColor}"
                           else
                             echo -e "${gYel}${fichier} ${gMag}>>cat ${gGre}${date}${noColor}"
                           fi;;
                  esac
                  break
               fi
           done 
           if [ "x${date}" == "x" ]; then
              fdate=$(stat "${fichier}"|grep Modif| cut -f1,2,3|awk -F " " '{print $2" "$3}'|cut -f1,2|awk -F "." '{print $1}')
              echo -e "${fichier} : pas de date , ${gMag}${fdate}${gRed}"
              echo -e "Modifier ${gGre}o${noColor}/${gYel}N${gGre} (non par défaut)${noColor}"
              read what
              if [[ "${what}" == "O" || "${what}" == "o" ]]; then 
                 if [ "$pilot" == "Oui" ];then
                    echo -e ${mup}${gWhi}Tapez entrée ...${noColor}
                    env WINEPREFIX="$HOME/.wine" wine E:\\Program\ Files\\Exif\ Pilot\\ExifPilot.exe 2>/dev/null
                    date=$(identify -format "%[EXIF:DateTime]" "${fichier}"| cut -f1,2,3,4,5| awk -F ":" '{print $1"-"$2"-"$3":"$4":"$5}')
                 else
                    echo -e "${mup}${gWhi}Entrez la date${noColor}"
                    read date
                    exiftool -DateTime="${date}" "${fichier}" 1>/dev/null
                 fi
                 touch -d "${date}" "${fichier}" 2>/dev/null
                 echo -e "${gYel}${fichier} ${gMag}=> ${gGre}${date}${noColor}"
              else
                 touch -d "${fdate}" "${fichier}" 2>/dev/null
                 echo -e "${mup}${mup}${gYel}${fichier} ${gMag}=> ${gGre}${fdate}${noColor}"
              fi
           fi
        fi
    done
done

Si je suis capable de créer la date exif avec exiftool, je ne suis pas capable de récupérer la date créée.
Je la crée avec la paramètre DateTime (ligne 111)
Avec eog, la propriété retournée est xmp:ModifyDate, valeur que je mettais dans le tableau clés (ligne 59) => pas trouvée
J'ai essayé avec d'autres valeurs et notamment avec tiff:Datetime, nom trouvé en faisant un cat de test.png (après création avec exiftool et DateTime).

Si je visualise les propriétés avec identify, j'ai ça:

alain@Gramps-JujuLand2:~/Bureau/test exif$ identify -verbose test.png
Image: test.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: DirectClass
  Geometry: 212x248+0+0
  Resolution: 28.35x28.35
  Print size: 7.47795x8.7478
  Units: PixelsPerCentimeter
  Type: TrueColor
  Endianess: Undefined
  Colorspace: sRGB
  Depth: 8-bit
  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit
  Channel statistics:
    Pixels: 52576
    Red:
      min: 9 (0.0352941)
      max: 219 (0.858824)
      mean: 128.117 (0.502421)
      standard deviation: 51.6104 (0.202394)
      kurtosis: -1.18289
      skewness: -0.293685
    Green:
      min: 0 (0)
      max: 203 (0.796078)
      mean: 89.7708 (0.352042)
      standard deviation: 65.133 (0.255424)
      kurtosis: -1.21348
      skewness: 0.615829
    Blue:
      min: 0 (0)
      max: 205 (0.803922)
      mean: 93.1007 (0.365101)
      standard deviation: 63.8618 (0.250438)
      kurtosis: -1.19903
      skewness: 0.650806
  Image statistics:
    Overall:
      min: 0 (0)
      max: 219 (0.858824)
      mean: 103.663 (0.406521)
      standard deviation: 60.5097 (0.237293)
      kurtosis: -1.20875
      skewness: 0.300058
  Rendering intent: Perceptual
  Gamma: 0.454545
  Chromaticity:
    red primary: (0.64,0.33)
    green primary: (0.3,0.6)
    blue primary: (0.15,0.06)
    white point: (0.3127,0.329)
  Background color: white
  Border color: srgb(223,223,223)
  Matte color: grey74
  Transparent color: black
  Interlace: None
  Intensity: Undefined
  Compose: Over
  Page geometry: 212x248+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Zip
  Orientation: Undefined
  Properties:
    Comment: Created with GIMP
    date:create: 2021-07-31T15:40:02+02:00
    date:modify: 2021-06-09T10:20:21+02:00
    png:IHDR.bit-depth-orig: 8
    png:IHDR.bit_depth: 8
    png:IHDR.color-type-orig: 2
    png:IHDR.color_type: 2 (Truecolor)
    png:IHDR.interlace_method: 0 (Not interlaced)
    png:IHDR.width,height: 212, 248
    png:pHYs: x_res=2835, y_res=2835, units=1
    png:sRGB: intent=0 (Perceptual Intent)
    png:text: 1 tEXt/zTXt/iTXt chunks were found
    png:tIME: 2021-07-28T15:28:16Z
    signature: ae49a9efadc84f560b4c2cbf6b7cca2d8665636fc5657cbed93d0568a8c77e96
  Artifacts:
    filename: test.png
    verbose: true
  Tainted: False
  Filesize: 69.8KB
  Number pixels: 52.6K
  Pixels per second: 5.258MB
  User time: 0.000u
  Elapsed time: 0:01.009
  Version: ImageMagick 6.8.9-9 Q16 x86_64 2020-12-04 http://www.imagemagick.org

Alors qu'avec exitool, j'ai ça :

alain@Gramps-JujuLand2:~/Bureau/test exif$ exiftool -all "test.jpg"ExifTool Version Number         : 10.10
File Name                       : test.jpg
Directory                       : .
File Size                       : 18 kB
File Modification Date/Time     : 2021:07:31 22:59:06+02:00
File Access Date/Time           : 2021:07:31 22:59:06+02:00
File Inode Change Date/Time     : 2021:07:31 22:59:06+02:00
File Permissions                : rw-rw-r--
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
JFIF Version                    : 1.01
Resolution Unit                 : inches
X Resolution                    : 72
Y Resolution                    : 72
XMP Toolkit                     : Image::ExifTool 10.10
Date/Time Modified              : 2004:02:29 16:21:42
Comment                         : Created with GIMP
Image Width                     : 212
Image Height                    : 248
Encoding Process                : Progressive DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:4:4 (1 1)
Image Size                      : 212x248
Megapixels                      : 0.053

cat du fichier png:

XML:com.adobe.xmp<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 10.10'>
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>

 <rdf:Description rdf:about=''
  xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
  <tiff:DateTime>2021-06-09T10:20:21</tiff:DateTime>
 </rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end='r'?>

Bref, je me demande si ça ne vient pas de la spécificité des png

Une idée ?

Merci
A+


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#16 Le 31/07/2021, à 23:37

Watael

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

exts=("PNG" "png" "JPG" "jpg" "jpeg")

tu n'as pas de fichiers JPEG ?

for ext in ${exts[@]}; do
    for fichier in *.${ext}; do
shopt -s nullglob extglob nocaseglob
for fichier in *.@(jp?(e)g|png)
if [ "${fichier}" != "*.${ext}" ]

comment un fichier pourrait ne pas avoir une extension correcte alors que tu boucles sur la liste des extensions et la liste des fichiers avec chacune des extensions ?!

grep | cut | awk | cut | awk c'est pas possible : awk tout seul peut faire tout ça.

et puis, toutes ces accolades, ça me donne mal aux yeux. roll

Dernière modification par Watael (Le 31/07/2021, à 23:42)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#17 Le 01/08/2021, à 09:57

JujuLand

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Bonjour,

Watael a écrit :

shopt -s nullglob extglob nocaseglob
for fichier in *.@(jp?(e)g|png)

Je ne connaissais pas shopt ... bien pratique

Watael a écrit :

if [ "${fichier}" != "*.${ext}" ]; then
comment un fichier pourrait ne pas avoir une extension correcte alors que tu boucles sur la liste des extensions et la liste des fichiers avec chacune des extensions ?!

Dans le cas où il n'y avait pas de fichier d'un type d'extension, le script essayait de traiter "*.$ext", ce qui générait des erreurs.

Watael a écrit :

grep | cut | awk | cut | awk c'est pas possible : awk tout seul peut faire tout ça.

Sans doute, ... je vais me plonger dan awk ...

Quand aux accolades, même si c'est un peu plus difficile, c'est parfois nécessaire ...

alain@Gramps-JujuLand2:~$ echo -e $gGreLe premier mot du texte a disparu
premier mot du texte a disparu
alain@Gramps-JujuLand2:~$ echo -e $gGre Le texte commence à la colonne 2
 Le texte commence à la colonne 2
alain@Gramps-JujuLand2:~$ echo -e ${gGre}Le texte commence bien à la colonne 1
Le texte commence à la colonne 1

Du coup, j'ai pris l'habitude d'insérer les variables par des accolades.

Bon, si tes remarques vont me permettre de simplifier mon script, ça ne me donne pas la raison de mon problème avec les png.

A+


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#18 Le 01/08/2021, à 11:55

erresse

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Bonjour,
Regarde ICI pour voir si ton problème ne viendrait pas tout simplement de là... D'origine, les fichiers images PNG ne supportent pas l'EXIF.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#19 Le 01/08/2021, à 15:39

JujuLand

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Effectivement, le problème est lié au png ...

Si j'utilise ExifPilot (windows) le bloc exif est créé en utilisant izTXt, mais exiftool ne semble pas pouvoir ouvrir ce type de paramètre ...

Par contre, si j'utilise exiftool, le paramètre est enregistré en fin de fichier dans une structure xml. Et même si exiftool ne semble pas capable de récupérer la valeur, j'ai trouvé un moyen de le faire :

tail -n 9 test.png > png
head -n 7 png > png2
cat png2|grep DateTime
  <tiff:DateTime>2021-06-09T10:20:21</tiff:DateTime>

Me reste juste à optimiser un peu le code avec shopt et gawk ...

A+


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#20 Le 01/08/2021, à 22:25

JujuLand

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Bon, voici une version qui fonctionne maintenant avec les png.
Seul truc pas trop top, comme la date n'est pas trouvée par exiftool, j'ai du rajouter une verrue à la partie concernant les dates non trouvées, pour lire la date dans la zone XML en fin de fichier, et donc m'abstenir de redemander la date.
Donc, à optimiser, les tests de cette partie ... mais ça fonctionne, ce qui est déjà pas mal ...

#!/bin/bash

version=1.20
datvers=2021-08-01

if [ "x${gYel}" == "x" ];then
   export gRed='\033[1;31m'
   export gGre='\033[1;32m'
   export gYel='\033[1;33m'
   export gBlu='\033[1;34m'
   export gMag='\033[1;35m'
   export gCya='\033[1;36m'
   export gWhi='\033[1;37m'
   export noColor='\033[0m'
   export mup='\033[0A'
fi

if [ "$1" == "-v" ];then
   echo -e "ii\texif2date\t$version\t$datvers"
   exit
elif [ "$1" == "-h" ];then
   clear
   echo " "
   echo -e "${gYel}                    exif2date ${gGre}v${version} ${gMag}${datvers}"
   echo ""
   echo -e "${gGre}1)${gYel} Remplacer la date du fichier par la date exif"
   echo -e "${gGre}2)${gMag} Remplacer la date exif 0000-00-00 00:00:00 par une date correcte"
   echo -e "      ${fMag}- soit par une date à saisir puis remplacer la date fichier"
   echo -e "      - soit par la date fichier"
   echo -e "${gGre}3)${gGre} Créer la date exif"  
   echo -e "      ${fGre}- soit une date à saisir puis remplacer la date fichier"
   echo -e "      - soit la date fichier${noColor}"
   echo " "
   exit
elif [ "$1" == "-w" ];then
   export pilot="Oui"
fi

echo -e "${gYel}Mise à jour des dates des images de ${gGre}$(pwd)${noColor}"
echo ""
echo "Mise à jour des dates des images de $(pwd)" > tridate.log
echo "" >>tridate.log

# This script uses 'Exif Pilot' for Windows to add or correct missing or bad dates
# Just set the variable containing the Exif Pilot program location in the concerned lines (62, 85)
# MISE A JOUR DE "cwd" DANS user.reg
if [ "$pilot" == "Oui" ];then
   if [ $(locate -b ExifPilot.exe|wc -l) == 1 ];then
      sed -i '/^"cwd"=".*"$/s/:\\\\.*/'":${PWD//\//\\\\\\\\}"'"/' "$HOME/.wine/user.reg"
   else
      echo -e "${gRed}Exif Pilot n'est pas installé ..."
      echo -e "${gYel}Téléchargez-le: ${gGre}https://www.two-pilots.com/colorpilot.com/load/exif.exe"
      echo -e "${gMag}... et installez-le !!!${noColor}"
      echo " "
      exit
   fi
fi

cles=("EXIF:DateTimeOriginal" "EXIF:DateTime" "TIFF:DateCreation" "tiff:DateTime")
exts=("PNG" "png" "JPG" "jpg" "jpeg")
shopt -s nullglob extglob nocaseglob

for fichier in *.@(jp?(e)g|png); do
    for cle in ${cles[@]}; do
        date1=$(identify -format "%[${cle}]" "${fichier}"|awk -F "T" '{print $1" "$2}'| cut -f1,2,3,4,5,6| awk -F ":" '{print $1"-"$2"-"$3" "$4}'|awk -F " " '{print $1}')
        time=$(identify -format "%[${cle}]" "${fichier}"|awk -F "T" '{print $1" "$2}'| cut -f1,2,3,4,5,6| awk -F ":" '{print $1"-"$2"-"$3" "$4}'|awk -F " " '{print $2}'| awk -F "-" '{print $1":"$2":"$3}')
        date=$(echo $date1 $time)
        if [ "x${date}" != "x" ]; then
           case ${date} in
                "0000-00-00 00:00:00")
                    if [ "$pilot" == "Oui" ];then
                      env WINEPREFIX="$HOME/.wine" wine E:\\Program\ Files\\Exif\ Pilot\\ExifPilot.exe 2>/dev/null
                      date=$(identify -format "%[EXIF:DateTime]" "${fichier}"| cut -f1,2,3,4,5| awk -F ":" '{print $1"-"$2"-"$3":"$4":"$5}')
                   else
                      date=$(stat "${fichier}"|grep Modif|awk -F " " '{print $2" "$3}'|awk -F "." '{print $1}')
                      echo -e "${fichier} : "0000-00-00 00:00:00" , ${gMag}${date}${gRed}"
                      echo -e "Modifier ${gGre}o${noColor}/${gYel}N${gGre} (non par défaut)${noColor}"
                      read what
                      if [[ "${what}" == "O" || "${what}" == "o" ]]; then 
                         read date
                         exiftool -DateTime="${date}" "${fichier}"
                      fi
                   fi
                   touch -d "${date}" "${fichier}"
                   echo -e "${mup}${mup}${gYel}${fichier} ${gMag}=> ${gGre}${date}${noColor}" ;;
                *)
                   fdate=$(stat "${fichier}"|grep Modif|awk -F " " '{print $2" "$3}'|awk -F "." '{print $1}')
                   touch -d "${date}" "${fichier}"
                   if [ "${fdate}" == "${date}" ]; then
                      echo -e "${gYel}${fichier} ${gMag}== ${gGre}${date}${noColor}"
                   else
                      echo -e "${gYel}${fichier} ${gMag}>> ${gGre}${date}${noColor}"
                   fi;;
           esac
           break
        fi
    done 
    if [ "x${date}" == "x" ]; then
       fdate=$(stat "${fichier}"|grep Modif| awk -F " " '{print $2" "$3}'|awk -F "." '{print $1}')
       ext=$(echo ${fichier} | sed 's/.*\.//g')
       if [[ "$ext" == "png" || "$ext" == "PNG" ]]; then
          tail -n 7 test.png > png
          head -n 6 png > png2
          cat png2|grep DateTime| awk -F ">" '{print $2}'|awk -F "<" '{print $1}'|awk -F "T" '{print $1" "$2}'>png
          date=$(cat png)
          rm png png2
          if [ "x${date}" == "x" ]; then
             echo -e "${fichier} : pas de date , ${gMag}${fdate}${gRed}"
             echo -e "Modifier ${gGre}o${noColor}/${gYel}N${gGre} (non par défaut)${noColor}"
          else
             touch -d "${date}" "${fichier}" 2>/dev/null
             echo -e "${gYel}${fichier} ${gMag}=> ${gGre}${date}${noColor}"
          fi
       else
          echo -e "${fichier} : pas de date , ${gMag}${fdate}${gRed}"
          echo -e "Modifier ${gGre}o${noColor}/${gYel}N${gGre} (non par défaut)${noColor}"
       fi
       if [ "x${date}" == "x" ]; then
          read what
          if [[ "${what}" == "O" || "${what}" == "o" ]]; then 
             if [ "$pilot" == "Oui" ];then
                echo -e ${mup}${gWhi}Tapez entrée ...${noColor}
                env WINEPREFIX="$HOME/.wine" wine E:\\Program\ Files\\Exif\ Pilot\\ExifPilot.exe 2>/dev/null
                date=$(identify -format "%[EXIF:DateTime]" "${fichier}"| cut -f1,2,3,4,5| awk -F ":" '{print $1"-"$2"-"$3":"$4":"$5}')
             else
                echo -e "${mup}${gWhi}Entrez la date${noColor}"
                read date
                exiftool -DateTime="${date}" "${fichier}" 1>/dev/null
             fi
          fi
          if [[ "${what}" == "O" || "${what}" == "o" ]]; then 
             touch -d "${date}" "${fichier}" 2>/dev/null
             echo -e "${gYel}${fichier} ${gMag}=> ${gGre}${date}${noColor}"
          else
             touch -d "${fdate}" "${fichier}" 2>/dev/null
             echo -e "${mup}${mup}${gYel}${fichier} ${gMag}=> ${gGre}${fdate}${noColor}"
          fi
       fi
    fi
done

A la réflexion, je ferai le test png avant tout autre test, ce sera plus simple ...

A+

Dernière modification par JujuLand (Le 02/08/2021, à 11:12)


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#21 Le 02/08/2021, à 11:26

kamaris

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

if [ "x${date}" == "x" ]; then

->

if [ -z "$date" ]; then

et

if [ "x${date}" != "x" ]; then

->

if [ -n "$date" ]; then

smile

Hors ligne

#22 Le 10/08/2021, à 10:53

JujuLand

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Application des conseils, remontée du test png en tout début et correction d'un bug concernant la lecture de DateTime, voici donc la dernièe version du script exif2date :

#!/bin/bash

version=1.22
datvers=2021-08-09

if [ "x${gYel}" == "x" ];then
   export gRed='\033[1;31m'
   export gGre='\033[1;32m'
   export gYel='\033[1;33m'
   export gBlu='\033[1;34m'
   export gMag='\033[1;35m'
   export gCya='\033[1;36m'
   export gWhi='\033[1;37m'
   export noColor='\033[0m'
   export mup='\033[0A'
fi

if [ "$1" == "-v" ];then
   echo -e "ii\texif2date\t$version\t$datvers"
   exit
elif [ "$1" == "-h" ];then
   clear
   echo " "
   echo -e "${gYel}                    exif2date ${gGre}v${version} ${gMag}${datvers}"
   echo ""
   echo -e "${gGre}1)${gYel} Remplacer la date du fichier par la date exif"
   echo -e "${gGre}2)${gMag} Remplacer la date exif 0000-00-00 00:00:00 par une date correcte"
   echo -e "      ${fMag}- soit par une date à saisir puis remplacer la date fichier"
   echo -e "      - soit par la date fichier"
   echo -e "${gGre}3)${gGre} Créer la date exif"  
   echo -e "      ${fGre}- soit une date à saisir puis remplacer la date fichier"
   echo -e "      - soit la date fichier${noColor}"
   echo " "
   exit
elif [ "$1" == "-w" ];then
   export pilot="Oui"
fi

echo -e "${gYel}Mise à jour des dates des images de ${gGre}$(pwd)${noColor}"
echo ""
echo "Mise à jour des dates des images de $(pwd)" > tridate.log
echo "" >>tridate.log

# This script uses 'Exif Pilot' for Windows to add or correct missing or bad dates
# Just set the variable containing the Exif Pilot program location in the concerned lines (62, 85)
# MISE A JOUR DE "cwd" DANS user.reg
if [ "$pilot" == "Oui" ];then
   if [ $(locate -b ExifPilot.exe|wc -l) == 1 ];then
      sed -i '/^"cwd"=".*"$/s/:\\\\.*/'":${PWD//\//\\\\\\\\}"'"/' "$HOME/.wine/user.reg"
   else
      echo -e "${gRed}Exif Pilot n'est pas installé ..."
      echo -e "${gYel}Téléchargez-le: ${gGre}https://www.two-pilots.com/colorpilot.com/load/exif.exe"
      echo -e "${gMag}... et installez-le !!!${noColor}"
      echo " "
      exit
   fi
fi

cles=("EXIF:DateTimeOriginal" "EXIF:DateTime" "TIFF:DateCreation" "tiff:DateTime")
shopt -s nullglob extglob nocaseglob

for fichier in *.@(jp?(e)g|png); do
    ext=$(echo "${fichier##*.}"|tr '[A-Z]' '[a-z]')
    for cle in ${cles[@]}; do
        if [ "$ext" == "png" ]; then
           tail -n 7 test.png > png
           head -n 6 png > png2
           cat png2|grep DateTime| awk -F ">" '{print $2}'|awk -F "<" '{print $1}'|awk -F "T" '{print $1" "$2}'>png
           date=$(cat png)
           rm png png2
        else
           if [ "$cle" == "EXIF:DateTimeOriginal" ];then
              date1=$(identify -format "%[${cle}]" "${fichier}"| awk -F " " '{print $1}'|awk -F ":" '{print $1"-"$2"-"$3}')
              time=$(identify -format "%[${cle}]" "${fichier}"|awk -F " " '{print $2}')
              date=$(echo ${date1} ${time})
           else
              date1=$(identify -format "%[${cle}]" "${fichier}"| cut -f1,2,3,4,5| awk -F ":" '{print $1"-"$2"-"$3":"$4":"$5}')
              date=$(echo ${date}|sed 's|T| |1')
           fi
        fi
        if [ -n "${date}" ]; then
           case ${date} in
                "0000-00-00 00:00:00")
                    if [ "$pilot" == "Oui" ];then
                      env WINEPREFIX="$HOME/.wine" wine E:\\Program\ Files\\Exif\ Pilot\\ExifPilot.exe 2>/dev/null
                      date=$(identify -format "%[EXIF:DateTime]" "${fichier}"| cut -f1,2,3,4,5| awk -F ":" '{print $1"-"$2"-"$3":"$4":"$5}')
                   else
                      date=$(stat "${fichier}"|grep Modif|awk -F " " '{print $2" "$3}'|awk -F "." '{print $1}')
                      echo -e "${gBlu}${fichier} : "0000-00-00 00:00:00" , ${gMag}${date}${gRed}"
                      echo -e "Modifier ${gGre}o${noColor}/${gYel}N${gGre} (non par défaut)${noColor}"
                      read what
                      if [[ "${what}" == "O" || "${what}" == "o" ]]; then 
                         read date
                         exiftool -DateTime="${date}" "${fichier}"
                      fi
                   fi
                   touch -d "${date}" "${fichier}"
                   echo -e "${mup}${mup}${gYel}${fichier} ${gMag}=> ${gGre}${date}${noColor}" ;;
                *)
                   fdate=$(stat "${fichier}"|grep Modif|awk -F " " '{print $2" "$3}'|awk -F "." '{print $1}')
                   touch -d "${date}" "${fichier}"
                   if [ "${fdate}" == "${date}" ]; then
                      echo -e "${gYel}${fichier} ${gMag}== ${gGre}${date}${noColor}"
                   else
                      echo -e "${gYel}${fichier} ${gMag}>> ${gGre}${date}${noColor}"
                   fi;;
           esac
           break
        fi
    done 
    if [ -z "${date}" ]; then
       fdate=$(stat "${fichier}"|grep Modif| awk -F " " '{print $2" "$3}'|awk -F "." '{print $1}')
       ext=$(echo ${fichier} | sed 's/.*\.//g')
       echo -e "${gBlu}${fichier} : pas de date , ${gMag}${fdate}${gRed}"
       echo -e "Modifier ${gGre}o${noColor}/${gYel}N${gGre} (non par défaut)${noColor}"
       read what
       if [[ "${what}" == "O" || "${what}" == "o" ]]; then 
          if [ "$pilot" == "Oui" ];then
             echo -e ${mup}${gWhi}Tapez entrée ...${noColor}
             env WINEPREFIX="$HOME/.wine" wine E:\\Program\ Files\\Exif\ Pilot\\ExifPilot.exe 2>/dev/null
             date=$(identify -format "%[EXIF:DateTime]" "${fichier}"| cut -f1,2,3,4,5| awk -F ":" '{print $1"-"$2"-"$3":"$4":"$5}')
          else
             echo -e "${mup}${gWhi}Entrez la date${noColor}"
             read date
             exiftool -DateTime="${date}" "${fichier}" 1>/dev/null
          fi
          if [[ "${what}" == "O" || "${what}" == "o" ]]; then 
             touch -d "${date}" "${fichier}" 2>/dev/null
             echo -e "${gYel}${fichier} ${gMag}=> ${gGre}${date}${noColor}"
          else
             touch -d "${fdate}" "${fichier}" 2>/dev/null
             echo -e "${mup}${mup}${gYel}${fichier} ${gMag}=> ${gGre}${fdate}${noColor}"
          fi
       fi
    fi
done

Dernière modification par JujuLand (Le 10/08/2021, à 10:53)


Xubuntu 16.04 > Dell DM061 (2007) + Dell Inspiron 531 (2008)
Xubuntu 16.04 > Asus X51L (2009) + MSI GX723 (2009)
Xubuntu 22.04 > HP 15BA048NF (2018)

Hors ligne

#23 Le 10/08/2021, à 12:39

kamaris

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Il y avait celui-là aussi :

if [ "x${gYel}" == "x" ];then

Mais bon, des milliers de scripts ont tourné et continuent souvent de tourner avec ça, donc ça n'est pas vraiment un problème.

Hors ligne

#24 Le 10/08/2021, à 13:05

MicP

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

Bonjour

Un if avec un seul appel à la commande export pour plusieurs variables :

if [ "x${gYel}" == "x" ]; then
    export gRed='\033[1;31m'  \
           gGre='\033[1;32m'  \
           gYel='\033[1;33m'  \
           gBlu='\033[1;34m'  \
           gMag='\033[1;35m'  \
           gCya='\033[1;36m'  \
           gWhi='\033[1;37m'  \
           noColor='\033[0m'  \
           mup='\033[0A'
fi

Dernière modification par MicP (Le 11/08/2021, à 06:36)

Hors ligne

#25 Le 10/08/2021, à 13:55

Watael

Re : [Résolu] Erreur sed >> Scripts exif2date et colors

export n'a pas d'intérêt, ici, puisque les variables ne seront pas transmises à un programme tiers.

mais, comment $gYel pourrait-elle être définie au tout début du script ?
et serait-elle définie dans le shell courant (intentionnellement, ou par accident/essai...), les autres couleurs seraient-elles, elles aussi, définies ?

Dernière modification par Watael (Le 10/08/2021, à 13:56)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne