#1 Le 22/07/2019, à 15:34
- DonutMan75
[RESOLU] Exiv2 : deux résultats différents ??
(re) bonjour et désolé de vous déranger de nouveau mais...
savez-vous pourquoi deux exécutions d'affilées (moins de 2 secondes d'écart) d'exiv2 ne renvoie pas la même valeur ??
$ exiv2 IMG_5413.JPG 2>/dev/null | grep '^Camera model'
Camera model : Canon EOS
$ exiv2 IMG_5413.JPG 2>/dev/null | grep '^Camera model'
Fichier binaire (entrée standard) correspondant
En farfouillant sur le net, j'ai trouvé ça :
$ exiv2 IMG_5413.JPG 2>/dev/null | grep --binary-files=text '^Camera model'
Mais je ne comprends pas ce qu'il se passe...
Merci d'avance
Donut
Dernière modification par DonutMan75 (Le 24/07/2019, à 12:43)
Hors ligne
#2 Le 22/07/2019, à 21:53
- Nuliel
Re : [RESOLU] Exiv2 : deux résultats différents ??
Bonjour,
Pas de problème chez moi. Le fichier n'aurait pas changé de nom? Tu peux garder la sortie d'erreur pour voir quelle erreur ressort?
Dernière modification par Nuliel (Le 22/07/2019, à 21:54)
Hors ligne
#3 Le 23/07/2019, à 06:26
- DonutMan75
Re : [RESOLU] Exiv2 : deux résultats différents ??
Hello,
merci pour ton retour !
Non non le fichier ne change pas de nom...
J'ai essayé ta suggestion, mais ça ne change pas grand chose :
$ for f in $(seq 1 30) ; do exiv2 IMG_5413.JPG | grep '^Camera model' ; done
Camera model : Canon EOS 500D
(...)
Camera model : Canon EOS 500D
Fichier binaire (entrée standard) correspondant
Camera model : Canon EOS 500D
(...)
Camera model : Canon EOS 500D
J'ai tronqué les messages car sur les 30 affichages ici, seul un seul est problématique.. Souvent les trente retours sont identiques et corrects, des fois c'est un peu plus d'une erreur qui est générée...
Très curieusement, si j'essaie d'enlever toutes les lignes "attendue", (i.e. comportant un ':'), j'obtient cela :
$ for f in $(seq 1 30) ; do exiv2 IMG_5413.JPG | grep -v ':' ; done
Fichier binaire (entrée standard) correspondant
(...)
Fichier binaire (entrée standard) correspondant
(encore une fois, c'est tronqué : ici toutes les lignes sont identiques)
Voici le retour de exiv2 sans le grep :
$ exiv2 IMG_5413.JPG
File name : IMG_5413.JPG
File size : 5705314 Bytes
MIME type : image/jpeg
Image size : 4752 x 3168
Camera make : Canon
Camera model : Canon EOS
Image timestamp : 2019:07:22 11:46:58
Image number :
Exposure time : 1/160 s
Aperture : F6.3
Exposure bias : 0 EV
Flash : No, compulsory
Flash bias : 0 EV
Focal length : 170.0 mm
Subject distance: 00.97 m1.14 m
ISO speed : 3200
Exposure mode : Aperture priority
Metering mode : Multi-segment
Macro mode : Off
Image quality : Fine
Exif Resolution : 4752 x 3168
White balance : Auto
Thumbnail : image/jpeg, 10765 Bytes
Copyright :
Exif comment :
Pour terminer, j'ai également testé cela :
$ exiv2 IMG_5413.JPG > ~/t1
$ for f in $(seq 1 100) ; do exiv2 IMG_5413.JPG > ~/t2; diff ~/t1 ~/t2 ; done
$
Si je comprends bien l'instruction "--binary-files=text" indique à grep de traiter les fichiers binaires comme du texte ? Mais alors pourquoi dans *certains cas* la sortie d'exiv2 ne renvoie pas la même chose ??
D.
Hors ligne
#4 Le 23/07/2019, à 06:33
- DonutMan75
Re : [RESOLU] Exiv2 : deux résultats différents ??
Oh oh,
je viens d'avancer : le problème est présent dans les fichiers t1 et t2 que j'ai crées précédemment.
$ grep "Camera" t1
Fichier binaire t1 correspondant
$ grep "Camera" t2
Fichier binaire t2 correspondant
$ od -a t1
0000000 F i l e sp n a m e sp sp sp sp sp sp sp
0000020 : sp I M G _ 5 4 1 3 . J P G nl F
0000040 i l e sp s i z e sp sp sp sp sp sp sp :
0000060 sp 5 7 0 5 3 1 4 sp B y t e s nl M
0000100 I M E sp t y p e sp sp sp sp sp sp sp :
0000120 sp i m a g e / j p e g nl I m a g
0000140 e sp s i z e sp sp sp sp sp sp : sp 4 7
0000160 5 2 sp x sp 3 1 6 8 nl C a m e r a
0000200 sp m a k e sp sp sp sp sp : sp C a n o
0000220 n nl C a m e r a sp m o d e l sp sp
0000240 sp sp : sp C a n o n sp E O S sp 5 0
0000260 0 D nl I m a g e sp t i m e s t a
0000300 m p sp : sp 2 0 1 9 : 0 7 : 2 2 sp
0000320 1 1 : 4 6 : 5 8 nl I m a g e sp n
0000340 u m b e r sp sp sp sp : sp nl E x p o
0000360 s u r e sp t i m e sp sp sp : sp 1 /
0000400 1 6 0 sp s nl A p e r t u r e sp sp
0000420 sp sp sp sp sp sp : sp F 6 . 3 nl E x p
0000440 o s u r e sp b i a s sp sp sp : sp 0
0000460 sp E V nl F l a s h sp sp sp sp sp sp sp
0000500 sp sp sp sp : sp N o , sp c o m p u l
0000520 s o r y nl F l a s h sp b i a s sp
0000540 sp sp sp sp sp : sp 0 sp E V nl F o c a
0000560 l sp l e n g t h sp sp sp sp : sp 1 7
0000600 0 . 0 sp m m nl S u b j e c t sp d
0000620 i s t a n c e : sp 0 0 . 9 7 sp m
0000640 1 . 1 4 sp m nl I S O sp s p e e d
0000660 sp sp sp sp sp sp sp : sp 3 2 0 0 nl E x
0000700 p o s u r e sp m o d e sp sp sp : sp
0000720 A p e r t u r e sp p r i o r i t
0000740 y nl M e t e r i n g sp m o d e sp
0000760 sp sp : sp M u l t i - s e g m e n
0001000 t nl M a c r o sp m o d e sp sp sp sp
0001020 sp sp : sp O f f nl I m a g e sp q u
0001040 a l i t y sp sp sp : sp F i n e nl E
0001060 x i f sp R e s o l u t i o n sp :
0001100 sp 4 7 5 2 sp x sp 3 1 6 8 nl W h i
0001120 t e sp b a l a n c e sp sp sp : sp A
0001140 u t o nl T h u m b n a i l sp sp sp
0001160 sp sp sp sp : sp i m a g e / j p e g
0001200 , sp 1 0 7 6 5 sp B y t e s nl C o
0001220 p y r i g h t sp sp sp sp sp sp sp : sp
0001240 nl E x i f sp c o m m e n t sp sp sp
0001260 sp : sp nul nul nul nul nul nul nul nul nul nul nul nul nul
0001300 nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul
*
0001660 nul nul nul nl nl
0001665
Je suppose que ce sont ces "nul" tout à la fin du fichier qui posent problème.
Démonstration :
$ cat t1 | grep Camera
Fichier binaire (entrée standard) correspondant
$ head t1 | grep Camera
Camera make : Canon
Camera model : Canon EOS
Et également :
$ grep '^Camera model' ~/t1
Fichier binaire /home/donut/t1 correspondant
$ tr -d '\000' < ~/t1 | grep '^Camera model'
Camera model : Canon EOS
Bon mais je ne comprends toujours pas pourquoi des fois ça marche et des fois ça marche pas....
D.
Dernière modification par DonutMan75 (Le 23/07/2019, à 06:39)
Hors ligne
#5 Le 23/07/2019, à 09:48
- kamaris
Re : [RESOLU] Exiv2 : deux résultats différents ??
C'est peut-être une question de vitesse d'écriture de exiv2 dans le pipe : selon que grep a eu le temps de faire ou non son test de reconnaissance de binaires avant que exiv2 ait fini d'écrire, car grep est lancé en parallèle de exiv2 dans un process distinct.
Tandis que si tu lui passes le fichier directement par un « grep '^Camera model' ~/t1 », le problème ne se pose pas car il fait toujours le test sur le fichier entier.
EDIT : il est possible de réduire le test à
cat <(echo a) <(echo -ne "\x00") | grep a
pour obtenir par exemple :
$ cat <(echo a) <(echo -ne "\x00") | grep a
a
$ cat <(echo a) <(echo -ne "\x00") | grep a
Fichier binaire (entrée standard) correspondant
$ cat <(echo a) <(echo -ne "\x00") | grep a
a
$ cat <(echo a) <(echo -ne "\x00") | grep a
a
$ cat <(echo a) <(echo -ne "\x00") | grep a
a
$ cat <(echo a) <(echo -ne "\x00") | grep a
a
$ cat <(echo a) <(echo -ne "\x00") | grep a
a
$ cat <(echo a) <(echo -ne "\x00") | grep a
a
$ cat <(echo a) <(echo -ne "\x00") | grep a
a
$ cat <(echo a) <(echo -ne "\x00") | grep a
a
$ cat <(echo a) <(echo -ne "\x00") | grep a
Fichier binaire (entrée standard) correspondant
$ cat <(for ((i=1;i<2;i++)); do echo a; done) <(echo -ne "\x00") | grep a
a
$
Dernière modification par kamaris (Le 23/07/2019, à 12:18)
Hors ligne
#6 Le 24/07/2019, à 07:39
- DonutMan75
Re : [RESOLU] Exiv2 : deux résultats différents ??
Salut Kamaris,
merci pour tes éclaircissements,
j'ai fait des tests de mon côté et j'observe le même genre de comportement que toi !
Edifiant !!
Je ne m'étais jamais posé la question de la vitesse d'écriture dans le pipe..
Nénamoins :
Tandis que si tu lui passes le fichier directement par un « grep '^Camera model' ~/t1 », le problème ne se pose pas
je ne suis pas d'accord, le problème semble bien présent car, comme je l'indiquais dans mon post précédent :
$ grep '^Camera model' ~/t1
Fichier binaire /home/donut/t1 correspondant
$ tr -d '\000' < ~/t1 | grep '^Camera model'
Camera model : Canon EOS
Ce qui me reste à éclaircir :
1) Pourquoi le fichier t1 est-il considéré comme binaire ? C'est confirmé d'ailleurs par un file
$ file t1
t1: data
Alors certes, il y a bien plusieurs "\x00" dans le fichier mais d'après mes connaissances, c'est juste un caractère pour marquer la fin d'une chaîne de caractère. Normalement il ne devrait y en avoir qu'un seul à la fin du fichier. Ici c'est un peu exotique car il y en a plein (question d'alignement ?). Est-ce la raison pour laquelle file considère qu'on a du coup affaire à un fichier binaire et non ASCII ??
2) Pourquoi des fois ma commande "exiv2 ... | grep" machin fonctionne par moment ?? Si la vitesse d'écriture dans le pipe était la cause principale, on ne devrait plus l'observer quand on fait une sortie dans un fichier. Or ce n'est pas le cas...
Merci en tout cas pour vos pistes de réflexion !!
Bonne journée à tous
Donut
Hors ligne
#7 Le 24/07/2019, à 09:06
- ar barzh paour
Re : [RESOLU] Exiv2 : deux résultats différents ??
ça ressemble à un problème que j'avais eu lorsque j'ai développé une petite application utilisant exiv2
mais c'était en 2012
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#8 Le 24/07/2019, à 10:52
- kamaris
Re : [RESOLU] Exiv2 : deux résultats différents ??
Nénamoins :
Kamaris a écrit :Tandis que si tu lui passes le fichier directement par un « grep '^Camera model' ~/t1 », le problème ne se pose pas
je ne suis pas d'accord, le problème semble bien présent car, comme je l'indiquais dans mon post précédent :
$ grep '^Camera model' ~/t1 Fichier binaire /home/donut/t1 correspondant $ tr -d '\000' < ~/t1 | grep '^Camera model' Camera model : Canon EOS
Quand je disais « le problème ne se pose pas », je voulais dire « le problème [du comportement aléatoire] ne se pose pas » : quand tu passes directement le fichier à grep, il te répond systématiquement qu'il est binaire, car il a le temps de repérer les caractères nuls avant de lancer sa recherche des occurrences du pattern « ^Camera model ». Mais ce ne serait plus forcément vrai si le fichier était assez gros avec un caractère nul seulement tout à la fin et une occurrence du pattern au début.
Ce qui me reste à éclaircir :
1) Pourquoi le fichier t1 est-il considéré comme binaire ?
Ça, la réponse est dans man grep : « Non-text bytes indicate binary data; these are either output bytes that are improperly encoded for the current locale, or null input bytes when the -z option is not given. » Donc c'est comme ça, c'est son critère.
Pourquoi des fois ma commande "exiv2 ... | grep" machin fonctionne par moment ?? Si la vitesse d'écriture dans le pipe était la cause principale, on ne devrait plus l'observer quand on fait une sortie dans un fichier. Or ce n'est pas le cas...
Quand je dis « vitesse d'écriture dans le pipe » c'est peut-être bancal, mais la clef c'est que les process d'une commande où intervient un pipe tournent en parallèle, et qu'en conséquence il n'est pas rare d'observer des comportements aléatoires comme ça en bash.
Dernière modification par kamaris (Le 24/07/2019, à 10:54)
Hors ligne
#9 Le 24/07/2019, à 11:06
- kamaris
Re : [RESOLU] Exiv2 : deux résultats différents ??
@ar barzh paour : oui, ça me semble être exactement le même problème.
Quant au résultat donné par la commande file, ici ou dans l'autre sujet cité, il correspond lui aussi au test indiqué dans la page de manuel, en notant bien que ça n'est pas le même test que pour grep : « The type printed will usually contain one of the words text (the file contains only printing characters and a few common control characters and is probably safe to read on an ASCII terminal), executable (the file contains the result of compiling a program in a form understandable to some UNIX kernel or another), or data meaning anything else (data is usually “binary” or non-printable). »
Hors ligne
#10 Le 24/07/2019, à 12:42
- DonutMan75
Re : [RESOLU] Exiv2 : deux résultats différents ??
Super, un énorme merci à vous tous (et particulièrement kamaris) pour vos contributions !
Tout est clair maintenant !!
Passez une bonne après-midi... et hydratez vous (38°C de par chez moi...)
D.
Hors ligne