@@ -23,6 +23,9 @@ others=()
insta = true
flickr = true
gps = 0
opt_gps = true
opt_others = false
opt_lens = false
opt_model = false
@@ -31,8 +34,45 @@ opt_nature=false
opt_wildlife = false
opt_all = true
long_path = ` pwd ` "/" ` basename " $0 " ` # /Users/bruno/Documents/Scripts/kymsu2/keywords2insta.sh
# long: /Users/bruno/Documents/GitHub/GooFuzz/keywords2insta.sh
#long_path=$(realpath "$0") # vide
dir = $( dirname " $0 " ) # /Users/bruno/Documents/Scripts/keywords2insta
trim ( ) {
read -rd '' $1 <<< " ${ !1 } "
}
alpha_name =
alpha ( ) {
array = ( )
#declare -A ilce=( ['ILCE-7M3']="Alpha 7 III" ['ILCE-7M4']="α 7 IV" ['ILCE-7MRM5']="α 7R V" ['ILCE-7SM3']="Alpha 7S III" ['ILCE-7RM4']="α 7R IV" ['ILCE-7RM3']="α 7R III" ['ILCE-7C']="Alpha 7C" )
declare -A ilce
if [ -f $dir /sony.csv ] ; then
#echo "Loading Sony APNs..."
while IFS = ';' read -ra array;
do
key = " ${ array [0] } "
value = " ${ array [1] } "
ilce[ " $key " ] = " $value "
done < $dir /sony.csv
fi
for val in " ${ !ilce[@] } "
do
[ [ ${ val } = = " $model " ] ] && alpha_name = " ${ ilce [ $val ] } "
done
}
showHelp( ) {
echo -e " ${ greenbold } keywords2insta ${ reset } v1 .1 "
echo -e " ${ greenbold } keywords2insta ${ reset } v2 .1 "
echo -e "Bruno <bruno<clicclac.info>"
echo -e "Read exif and keywords from an image file, and copy them to the clipboard, "
echo -e " ready for Instagram and Flickr."
@@ -154,20 +194,24 @@ fi
[ ! -f " $file " ] && echo -e " ${ bold } ${ red } No input file ! ${ reset } " && exit 2
echo -e " \n ${ greenbold } keywords2insta ${ reset } v2.0 "
# dico français / anglais
fr = ( )
en = ( )
array = ( )
array2 = ( )
declare -A dico
if [ -f . /keywords.csv ] ; then
if [ -f $dir /keywords.csv ] ; then
while IFS = ';' read -ra array;
echo "Loading keyword dictionary..."
while IFS = ';' read -ra array2;
do
fr += ( " ${ array [0] } " )
en += ( " ${ array [1] } " )
done < keywords.csv
fr += ( " ${ array2 [0] } " )
en += ( " ${ array2 [1] } " )
done < $dir / keywords.csv
j = 0
for i in " ${ fr [@] } "
@@ -179,29 +223,113 @@ if [ -f ./keywords.csv ]; then
fi
echo -e " \n ${ greenbold } keywords2insta ${ reset } v1.1 "
echo -e " \n ${ bold } Reading $file exif... ${ reset } "
exif = $( exiftool -Canon -s -Keywords " $file " )
# The exiftool application exits with a status of 0 on success, or 1 if an
# error occurred, or 2 if all files failed the -if condition (for any of
# the commands if -execute was used).
#exif=$(exiftool -Canon -s -Keywords -j "$file")
exif = $( exiftool -j " $file " )
# The exiftool application exits with a status of 0 on success, or 1 if an
# error occurred, or 2 if all files failed the -if condition (for any of
# the commands if -execute was used).
# exif
#make=$(echo "$exif" | jq -e '.[] | has("Make") | .Make')
make = $( echo " $exif " | jq -j '.[] | .Make | select( . != null )' )
model = $( echo " $exif " | jq -j '.[] | .Model | select( . != null )' )
date_original = $( echo " $exif " | jq -j '.[] | .DateTimeOriginal | select( . != null )' )
speed = $( echo " $exif " | jq -j '.[] | .ShutterSpeed | select( . != null )' )
aperture = $( echo " $exif " | jq -j '.[] | .Aperture | select( . != null )' )
iso = $( echo " $exif " | jq -j '.[] | .ISO | select( . != null )' )
lens = $( echo " $exif " | jq -j '.[] | .Lens | select( . != null )' )
lensID = $( echo " $exif " | jq -j '.[] | .LensID | select( . != null )' )
lensModel = $( echo " $exif " | jq -j '.[] | .LensModel | select( . != null )' )
focal = $( echo " $exif " | jq -j '.[] | .FocalLength | select( . != null )' )
latitude = $( echo " $exif " | jq -j '.[] | .GPSLatitude | select( . != null )' )
longitude = $( echo " $exif " | jq -j '.[] | .GPSLongitude | select( . != null )' )
altitude = $( echo " $exif " | jq -j '.[] | .GPSAltitude | select( . != null )' )
echo
if [ [ -n $iso ] ] && [ [ -n $speed ] ] && [ [ -n $aperture ] ] ; then
printf " %-10s %-35s \n" "Speed:" " ${ speed } "
printf " %-10s %-35s \n" "Aperture:" " f/ ${ aperture } "
printf " %-10s %-35s \n" "ISO:" " ${ iso } "
printf " %-10s %-35s \n" "Date:" " ${ date_original } "
printf " %-10s %-35s \n" "Maker:" " ${ make } "
if [ [ " $make " = ~ ^SONY ] ] ; then
alpha
printf " %-10s %-35s \n" "APN:" " $alpha_name ( ${ model } ) "
else
printf " %-10s %-35s \n" "APN:" " ${ model } "
fi
printf " %-10s %-35s \n" "Focal:" " ${ focal } "
if [ [ -n $lensID ] ] ; then
printf " %-10s %-35s \n" "LensID:" " ${ lensID } "
l = " $lensID "
elif [ [ -n $lensModel ] ] ; then
printf " %-10s %-35s \n" "LensModel:" " ${ lensModel } "
l = " $lensModel "
else
printf " %-10s %-35s \n" "Lens:" " ${ lens } "
l = " $lens "
fi
if [ [ -n $latitude ] ] && [ [ -n $longitude ] ] ; then
printf " %-10s %-35s \n" "Latitude:" " ${ latitude } "
printf " %-10s %-35s \n" "Longitude:" " ${ longitude } "
printf " %-10s %-35s \n" "Altitude:" " ${ altitude } "
gps = 1
fi
echo
fi
# gps
if [ $opt_gps = true ] ; then
if [ $gps -eq 1 ] ; then
echo "GPS data available !"
a = $( echo -e " Do you want to ${ bold } erase GPS data ${ reset } ? (k)eep or (e)rase " )
read -p " $a " choice
if [ " $choice " = = "e" ] || [ " $choice " = = "E" ] ; then
echo "Erasing GPS data..."
exiftool -gps:all= " $file "
fi
fi
else
# erase GPS data
echo "Erasing GPS data..."
exiftool -gps:all= " $file "
fi
# keywords
k = $( echo " $exif " | sed -n '/^ Keywords/p ' | awk -F":" '{print $2}' | sed 's/^ * //g ' )
k = $( echo " $exif " | jq --compact-output --raw-output '.[] | . Keywords[]? ' | tr "\n" "," | sed 's/\,$ //' )
#k=$(echo "$exif" | sed -n '/^Keywords/p' | awk -F":" '{print $2}' | sed 's/^ *//g')
if [ -z " $k " ] ; then
echo -e " ${ bold } ${ red } No Keywords found ! ${ reset } "
echo "Quit."
exit 5
echo -e " \n ${ bold } ${ red } No Keywords found ! ${ reset } "
echo
fi
IFS = "," read -a key <<< " $k "
for i in " ${ key [@] } "
do
ii = $( echo " $i " | xargs) # trim $i
#echo "@$i@"
# @ bouton d'or@
# xargs: unterminated quote
ii = " $i "
trim ii
if [ [ ! " $ii " = ~ ^_ ] ] ; then
if [ [ ${ dico [ " $ii " ] } ] ] ; then
@@ -211,6 +339,7 @@ do
fi
k_fr = " $ii "
if [ -n " $k_en " ] ; then
[ [ " $k_fr " = *" " * ] ] && keyword_flickr += " \" ${ k_fr } \" " || keyword_flickr += " ${ k_fr } "
@@ -220,28 +349,72 @@ do
[ [ " $k_fr " = *" " * ] ] && keyword_flickr += " \" ${ k_fr } \" " || keyword_flickr += " ${ k_fr } "
keyword_insta += " # ${ k_fr // / } "
fi
fi
done
# model
# Canon EOS R6 Canon EOS 5D Mark III Canon EOS-1D Mark IV Canon EOS 20D
m = $( echo " $exif " | sed -n '/^Model/p' | awk -F ":" '{print $2}' | xargs )
mod= ( " ${ m } " ) # Canon EOS R6
#m=$(echo "$exif" | sed -n '/^Model/p' | awk -F":" '{print $2}' | xargs)
# mod=("${m}") # Canon EOS R6
if [ [ " $m " = ~ ^Canon ] ] ; then
# "Make": "OM Digital Solutions",
# "Model": "OM-5", "OM-1"
# "Make": "SONY",
# "Model": "ILCE-7M3", "ILCE-7M4"
# "Make": "FUJIFILM",
# "Model": "X-T5",
# "Make": "Panasonic",
# "Model": "DC-S5",
# "Make": "LEICA CAMERA AG",
# "Model": "LEICA Q3", "LEICA SL2-S"
# "Make": "NIKON CORPORATION",
# "Model": "NIKON D850",
# "Make": "NIKON CORPORATION",
# "Model": "NIKON Z 9",
# "Make": "Canon",
# "Model": "Canon EOS R7",
if [ [ " $make " = ~ ^Panasonic ] ] || [ [ " $make " = ~ ^FUJI ] ] ; then
mod = ( " ${ make } ${ model } " )
mod += ( " ${ make } " )
mod += ( " ${ model } " )
mod += ( " ${ make ,, } photography " )
elif [ [ " $make " = ~ ^SONY ] ] ; then
mod = ( " ${ make } ${ model } " )
mod += ( " ${ make } " )
mod += ( " ${ model } " )
# convertir α en Alpha
q = $( echo " ${ alpha_name } " | sed 's/α /Alpha /' )
mod += ( " $q " )
mod += ( " ${ make ,, } photography " )
elif [ [ " $make " = ~ ^"OM Digital Solutions" ] ] ; then
mod = ( " ${ make } ${ model } " ) # OM Digital Solutions OM-5
mod += ( "Olympus" ) # Olympus
mod += ( " ${ model } " ) # OM-5
elif [ [ " $model " = ~ ^NIKON ] ] || [ [ " $model " = ~ ^LEICA ] ] ; then
mod = ( " ${ make } " )
z = $( echo " ${ make ,, } " | awk '{print $1}' ) ## nikon
y = $( echo " ${ make } " | awk '{print $1}' ) ## NIKON
mod += ( " ${ z } photography " ) # nikonphotography leicaphotography
mod += ( " ${ y } " ) # NIKON LEICA
mod += ( " ${ model } " ) # NIKON Z 9 LEICA Q3
w = $( echo " ${ model } " | awk '{$1=""; print $0}' | xargs)
mod += ( " ${ w } " )
elif [ [ " $model " = ~ ^Canon ] ] ; then
mod += ( "Canon" )
mod += ( "canon photography" )
[ [ " $m " = *EOS* ] ] || mod += ( "EOS" ) # EOS
z = $( echo " $m " | sed 's/Canon\ //g' | xargs)
y = $( echo " $m " | sed 's/EOS//g' | sed 's/[ ][ ]*/ /g' | xargs)
mod += ( "${ make , } photography " )
[ [ " $model " = *EOS* ] ] || mod += ( "EOS" ) # EOS
z = $( echo " $model " | sed 's/Canon\ //g' | xargs)
y = $( echo " $model " | sed 's/EOS//g' | sed 's/[ ][ ]*/ /g' | xargs)
mod += ( " ${ z } " ) # EOS R6
mod += ( " ${ y } " ) # Canon R6
fi
for i in " ${ mod [@] } "
do
model += " ${ i } "
if [ [ " $i " = *" " * ] ] ; then
model_flickr += " \" ${ i } \" "
else
@@ -252,7 +425,53 @@ done
#lens
l = $( echo " $exif " | sed -n '/^Lens/p' | awk -F":" '{print $2}' | sed 's/\///g' | xargs)
# "LensModel": "E 28-200mm F2.8-5.6 A071",
# "Lens": "E 28-200mm F2.8-5.6 A071",
# "LensID": "Tamron 28-200mm F2.8-5.6 Di III RXD",
# "LensModel": "FE 35mm F2.8 ZA",
# "Lens": "FE 35mm F2.8 ZA",
# "LensID": "FE 35mm F2.8 ZA"
# LensID": "OLYMPUS M.12-45mm F4.0"
# "LensModel": "OLYMPUS M.12-45mm F4.0",
# "Lens": "OLYMPUS M.12-45mm F4.0",
# "LensModel": "OLYMPUS M.300mm F4.0",
# "Lens": "OLYMPUS M.300mm F4.0",
# "LensID": "OLYMPUS M.300mm F4.0"
# "Lens": "OLYMPUS M.300mm F4.0", "Lens": "OLYMPUS M.12-45mm F4.0",
# "LensModel": "OLYMPUS M.300mm F4.0", "LensModel": "OLYMPUS M.12-45mm F4.0",
# Leica no Lens no LensID
# "LensModel": "SUMMILUX 1:1.7/28 ASPH.", "Leica APO-Summicron-SL 35mm f/2 ASPH",
# "LensModel": "Leica APO-Summicron-SL 35mm f/2 ASPH",
# "Lens": "Leica APO-Summicron-SL 35mm f/2 ASPH",
# "LensID": "Leica APO-Summicron-SL 35mm f/2 ASPH"
# "Lens": "Fujifilm Fujinon XF18mmF1.4 R LM WR",
# "LensModel": "Fujifilm Fujinon XF18mmF1.4 R LM WR",
# LensID": "LUMIX S 20-60mm F3.5-5.6"
# "Lens": "LUMIX S 20-60/F3.5-5.6",
# "LensModel": "LUMIX S 20-60/F3.5-5.6",
# "LensID": "Fujifilm Fujinon XF18mm F1.4 R LM WR"
# "Lens": "400mm f/2.8",
# "LensID": "AF-S VR Nikkor 400mm f/2.8G ED",
# Nikon si LensModel vide => LensID
# "LensModel": "VR 300mm f/2.8G",
# "Lens": "300.0 mm f/2.8",
# "LensID": "VR 300mm f/2.8G"
# "LensModel": "EF600mm f/4L IS III USM",
# "LensID": "Canon EF 600mm f/4L IS III USM"
# "Lens": "EF600mm f/4L IS III USM",
# 1 LensID puis 2 LendModel
lens_flickr = " \" ${ l } \" "
lens_insta = " $( echo " $l " | sed 's/ //g' | sed -r 's/[^ ]+/#&/g' ) "
@@ -264,7 +483,6 @@ do
else
wildlife_flickr += " ${ i } "
fi
#wildlife_insta+="#"$(echo "${i}" | iconv -f UTF-8-MAC -t ascii//translit | sed 's/[^a-zA-Z 0-9]//g' | sed 's/ //g')" "
wildlife_insta += " # $( echo " ${ i } " | iconv -f UTF-8-MAC -t ascii//translit | sed 's/[^a-zA-Z 0-9]//g' | sed 's/ //g' ) "
done
@@ -402,11 +620,12 @@ if ! command -v gawk &> /dev/null; then
echo -e " - brew install gawk"
echo -e ""
else
#keywords_flickr=$(echo "$keywords_flickr" | gawk -v RS="[ \n]" -v ORS=" " '!($0 in a){print;a[$0]}')
keywords_insta = $( echo " $keywords_insta " | gawk -v RS = "[ \n]" -v ORS = " " '!($0 in a){print;a[$0]}' )
fi
# copy tags to clipboard
if [ " $insta " = true ] ; then
if [ [ " $OSTYPE " = = "linux-gnu" ] ] && [ -x " $( command -v xsel) " ] ; then