@@ -16,41 +16,105 @@ reset="\033[0m"
wild = ( "wildlife" "wildlifephoto" "wildlifephotographer" )
nat = ( "naturelovers" "natureshot" "naturephotography" )
reg = ( "Bourgogne" "Burgundy" "Bourgogne Franche-Comté" "Côte d'or" )
#others=("lanscape" "animal")
others= ( )
#others=("lanscape" "animal" "beautiful nature" )
# others=( )
# Display Instagram AND/OR Flickr tags
insta = true
flickr = true
insta = false # #Becasseauvariable #LeTeich #Bird
flickr = true # "Bécasseau variable" "Le Teich" Bird
ccpx = true # Bécasseau variable, Le Teich, Bird
gps = 0
opt_gps = true # insert gps data (false: gps data will be deleted in file)
opt_copyright = true # insert copyright, artist, creator (false: data will be deleted in file)
# Default: all tags
opt_others = false
opt_lens = false
opt_model = false
opt_region = false
opt_nature = false
opt_wildlife = false
opt_all = true
opt_all = true # default
# Google maps static
zoom = 10
color = blue
label = "S"
type = hybrid
map_size = "450x450"
prefix = ${ map_size %%x* } # find x position in map_size string
x = ${# prefix }
gm_width = ${ map_size : 0 : $x }
echo $gm_width
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
dotenv ( ) {
set -a
[ -f .env ] && . .env || echo -e " ${ red } \nNo .env file found ! Googlemaps reverse geocode not working. ${ reset } "
set +a
}
dotenv
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 } v3 .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."
echo -e " ready for Instagram, Flickr and 500px ."
echo
echo -e " ${ yellow } USAGE: ${ reset } "
echo -e " ${ green } keyword2insta [-Options...] -f <file> ${ reset } "
echo -e "If no option is chosen, all tags are added (default)."
echo -e "If no option (except gps and copyright) is chosen, all tags are added (default)."
echo -e "Keywords taken from exifs are automatically added."
echo -e " You can add keywords permanently by adding them to the ${ underline } others array ${ reset } at the start of the script. (See others=()) "
echo -e "The images files are not modified."
echo
echo -e "If the gps and coypright options are selected, the images files will be modified."
echo
echo -e " ${ yellow } OPTIONS: ${ reset } "
echo -e " ${ green } -f ${ reset } , ${ green } --file <file> ${ reset } Image file "
echo -e " ${ green } -l ${ reset } , ${ green } --lens ${ reset } Add lens exif "
echo -e " ${ green } -m ${ reset } , ${ green } --model ${ reset } Add APN model exif "
echo -e " ${ green } -n ${ reset } , ${ green } --nature ${ reset } Add nature related keywords "
echo -e " ${ green } -r ${ reset } , ${ green } --region ${ reset } Add region related keywords "
echo -e " ${ green } -t ${ reset } <keyword> ${ reset } Add some additionnals keywords "
echo -e " ${ green } -c ${ reset } , ${ green } --copyright ${ reset } Delete artist and copyright in file "
echo -e " ${ green } -t ${ reset } <keywords> Add some additionnals keywords "
echo -e " ${ green } -w ${ reset } , ${ green } --wildlife ${ reset } Add wildlife related keywords "
echo -e " ${ green } -h ${ reset } , ${ green } --help ${ reset } Display this help "
echo
@@ -75,13 +139,19 @@ showHelp() {
echo -e " 3: Unknown long option."
echo -e " 4: Unknown short option."
echo -e " 5: No Keywords found in image file."
echo
echo -e " ${ yellow } Changelog: ${ reset } "
echo -e " v3.0: support 500px"
echo -e " v3.1: display thumb"
echo -e " v3.2: suppress copyright and artist infos"
echo -e " v3.3: add a static Google maps for geoloc"
}
# https://stackoverflow.com/questions/402377/using-getopts-to-process-long-and-short-command-line-options
# le 1er : de $optspec supprime le message d'erreur
unset -v tags
#OPTIND=1
optspec = ":wnrf:t:mlh-:"
optspec = ":wnrc f:t:mlh-:"
while getopts " $optspec " opt
do
case $opt in
@@ -100,6 +170,7 @@ do
; ;
model) opt_model = true; ;
lens) opt_lens = true; ;
copyright) opt_copyright = false; ;
*)
if [ " $OPTERR " = 1 ] && [ " ${ optspec : 0 : 1 } " = ":" ] ; then
echo " Unknown option -- ${ OPTARG } " >& 2
@@ -110,6 +181,7 @@ do
w) opt_wildlife = true; ;
n) opt_nature = true; ;
r) opt_region = true; ;
c) opt_copyright = false; ;
f) file = " ${ OPTARG } " ; ;
t) tags = ( " $OPTARG " )
until [ [ $( eval " echo \${ $OPTIND } " ) = ~ ^-.* ] ] || [ -z $( eval " echo \${ $OPTIND } " ) ] ; do
@@ -137,12 +209,28 @@ if [ $opt_lens = true ] || [ $opt_model = true ] || [ $opt_region = true ] || [
opt_all = false
fi
# others: array from script
# tags: array from arguments
if [ ${# others [@] } -gt 0 ] || [ ${# tags [@] } -gt 0 ] ; then
opt_others = true
fi
t = $( echo " ${ tags [@] } " | sed -r 's/[^ ]+/,&/g' )
: <<'END_COMMENT'
echo "----"
echo "others: " ${others[@]}
echo "tags: " ${tags[@]} # t
echo "opt_lens: " $opt_lens # l
echo "opt_model: " $opt_model # m
echo "opt_region: " $opt_region # r
echo "opt_nature: " $opt_nature # n
echo "opt_wildlife: " $opt_wildlife # w
echo "opt_others: " $opt_others
echo "opt_copyright: " $opt_copyright # c
echo "----"
END_COMMENT
if ! command -v exiftool & > /dev/null; then
echo -e " ${ bold } exiftool ${ reset } could not be found !\n "
@@ -154,20 +242,24 @@ fi
[ ! -f " $file " ] && echo -e " ${ bold } ${ red } No input file ! ${ reset } " && exit 2
echo -e " \n ${ greenbold } keywords2insta ${ reset } v3.3 "
# 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 +271,287 @@ 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 -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 )' )
width = $( echo " $exif " | jq -j '.[] | .ImageWidth | select( . != null )' )
height = $( echo " $exif " | jq -j '.[] | .ImageHeight | select( . != null )' )
size = $( echo " $exif " | jq -j '.[] | .FileSize | select( . != null )' )
city = $( echo " $exif " | jq -j '.[] | .City | select( . != null )' )
state = $( echo " $exif " | jq -j '.[] | .State | select( . != null )' )
country = $( echo " $exif " | jq -j '.[] | .Country | select( . != null )' )
comment = $( echo " $exif " | jq -j '.[] | .Comment | select( . != null )' )
software = $( echo " $exif " | jq -j '.[] | .Software | select( . != null )' )
# EXIF:Artist | IPTC:By-line | XMP:Creator : Pesenti
# EXIF:Copyright | IPTC:CopyrightNotice | XMP:Rights: clicclac.info
art = $( echo " $exif " | jq -j '.[] | .Artist | select( . != null )' )
#byline=$(echo "$exif" | jq -j '.[] | .By-line | select( . != null )')
creator = $( echo " $exif " | jq -j '.[] | .Creator | select( . != null )' )
if [ -n " $art " ] ; then artist = " $art "
elif [ -n " $creator " ] ; then artist = " $creator "
fi
copy = $( echo " $exif " | jq -j '.[] | .Copyright | select( . != null )' )
notice = $( echo " $exif " | jq -j '.[] | .CopyrightNotice | select( . != null )' )
rights = $( echo " $exif " | jq -j '.[] | .Rights | select( . != null )' )
if [ -n " $copy " ] ; then copyright = " $copy "
elif [ -n " $notice " ] ; then copyright = " $notice "
else copyright = " $rights "
fi
# Display thumb image
if [ " $( echo $__CFBundleIdentifier | grep iterm2) " ] ; then
tmp_path = /tmp/k2i
[ -d $tmp_path ] && rm -rf $tmp_path
mkdir $tmp_path
tempfoo = ` basename " $file " `
magick " $file " -quality 50 -resize 600x600\> $tmp_path /thumb_$tempfoo
if [ -f " $tmp_path /thumb_ $tempfoo " ] ; then
[ $width -gt $height ] && w_thumb = 600 || w_thumb = $( echo "600/3*2" | bc)
printf " \n\t\033]1337;File=;width= $w_thumb px;inline=1:`cat $tmp_path /thumb_ $tempfoo | base64`\a\n "
fi
fi
echo
if [ [ -n $iso ] ] && [ [ -n $speed ] ] && [ [ -n $aperture ] ] ; then
printf " %-11s %-35s \n" "Speed:" " ${ speed } "
printf " %-11s %-35s \n" "Aperture:" " f/ ${ aperture } "
printf " %-11s %-35s \n" "ISO:" " ${ iso } "
printf " %-11s %-35s \n" "Date:" " ${ date_original } "
printf " %-11s %-35s \n" "Maker:" " ${ make } "
if [ [ " $make " = ~ ^SONY ] ] ; then
alpha
printf " %-11s %-35s \n" "APN:" " $alpha_name ( ${ model } ) "
else
printf " %-11s %-35s \n" "APN:" " ${ model } "
fi
printf " %-11s %-35s \n" "Focal:" " ${ focal } "
# Many lens have the same Lensid
# https://exiftool.org/forum/index.php?topic=3833.msg82043#msg82043
# "LensInfo": "100-500mm f/?",
# "LensModel": "RF100-500mm F4.5-7.1 L IS USM",
# "Lens": "RF100-500mm F4.5-7.1 L IS USM",
# "LensID": "Canon RF 100-500mm F4.5-7.1L IS USM or Canon RF 100-500mm F4.5-7.1L IS USM + RF1.4x or Canon RF 100-500mm F4.5-7.1L IS USM + RF2x"
# "LensInfo": "600mm f/?",
# "LensModel": "EF600mm f/4L IS III USM",
# "Lens": "EF600mm f/4L IS III USM",
# "LensID": "Canon EF 600mm f/4L IS III USM"
# "LensInfo": "100mm f/?",
# "LensModel": "EF100mm f/2.8 Macro USM",
# "Lens": "EF100mm f/2.8 Macro USM",
# "LensID": "Canon EF 100mm f/2.8 Macro USM"
# "LensInfo": "24-105mm f/?",
# "LensModel": "EF24-105mm f/4L IS USM",
# "Lens": "EF24-105mm f/4L IS USM",
# "LensID": "Canon EF 24-105mm f/4L IS USM"
# "LensInfo": "17-40mm f/?",
# "LensModel": "EF17-40mm f/4L USM",
# "Lens": "EF17-40mm f/4L USM",
# "LensID": "Canon EF 17-40mm f/4L USM"
# "LensInfo": "500mm f/?",
# "LensModel": "EF500mm f/4L IS USM",
# "Lens": "EF500mm f/4L IS USM",
# "LensID": "Canon EF 500mm f/4L IS USM"
# "LensInfo": "70-200mm f/?",
# "LensModel": "EF70-200mm f/4L USM",
# "Lens": "EF70-200mm f/4L USM",
# "LensID": "Canon EF 70-200mm f/4L USM"
# "LensInfo": "24mm f/?",
# "LensModel": "24mm F1.4 DG HSM | Art 015",
# "Lens": "24mm F1.4 DG HSM | Art 015",
# "LensID": "Sigma 24-105mm f/4 DG OS HSM | A"
# "LensInfo": "24-105mm f/?",
# "LensModel": "RF24-105mm F4-7.1 IS STM",
# "Lens": "RF24-105mm F4-7.1 IS STM",
# "LensID": "Canon RF 24-105mm F4-7.1 IS STM"
# "LensInfo": "840mm f/?",
# "LensModel": "EF600mm f/4L IS III USM +1.4x III",
# "Lens": "EF600mm f/4L IS III USM +1.4x III",
# "LensID": "Canon EF 600mm f/4L IS III USM + 1.4x"
# "LensInfo": "700mm f/?",
# "LensModel": "EF500mm f/4L IS USM +1.4x III",
# "Lens": "EF500mm f/4L IS USM +1.4x III",
# "LensID": "Canon EF 500mm f/4L IS USM + 1.4x"
if [ [ -n $lensID ] ] ; then
printf " %-11s %-35s \n" "LensID:" " ${ lensID } "
l = " $lensID "
elif [ [ -n $lensModel ] ] ; then
printf " %-11s %-35s \n" "LensModel:" " ${ lensModel } "
l = " $lensModel "
else
printf " %-11s %-35s \n" "Lens:" " ${ lens } "
l = " $lens "
fi
# width > height && w=2400 || w=1600
if [ $width -gt $height ] ; then
wi = 2400
he = 1600
[ $width -ne $wi ] && printf " %-11s %-35b \n" "Width:" " ${ red } ${ width } ${ reset } " || printf " %-11s %-35s \n" "Width:" " ${ width } "
[ $height -ne $he ] && printf " %-11s %-35b \n" "Height:" " ${ red } ${ height } ${ reset } " || printf " %-11s %-35s \n" "Height:" " ${ height } "
elif [ $height -gt $width ] ; then
wi = 1600
he = 2400
[ $width -ne $wi ] && printf " %-11s %-35b \n" "Width:" " ${ red } ${ width } ${ reset } " || printf " %-11s %-35s \n" "Width:" " ${ width } "
[ $height -ne $he ] && printf " %-11s %-3b \n" "Height:" " ${ red } ${ height } ${ reset } " || printf " %-11s %-35s \n" "Height:" " ${ height } "
fi
#printf " %-11s %-35s \n" "Width:" "${width}"
#printf " %-11s %-35s \n" "Height:" "${height}"
printf " %-11s %-35s \n" "Size:" " ${ size } "
if [ [ -n $latitude ] ] && [ [ -n $longitude ] ] ; then
gps = 1
printf " %-11s %-35s \n" "Latitude:" " ${ latitude } "
printf " %-11s %-35s \n" "Longitude:" " ${ longitude } "
printf " %-11s %-35s \n" "Altitude:" " ${ altitude } "
city = ""
if [ [ -n $city ] ] && [ [ -n $state ] ] && [ [ -n $country ] ] ; then
printf " %-11s %-35s \n" "City:" " ${ city } "
printf " %-11s %-35s \n" "State:" " ${ state } "
printf " %-11s %-35s \n" "Country:" " ${ country } "
else
coords = $( exiftool -n -gpslatitude -gpslongitude " $file " )
lat = $( echo " $coords " | sed -n '1p' | awk -F":" '{print $2}' | xargs)
long = $( echo " $coords " | sed -n '$p' | awk -F":" '{print $2}' | xargs)
if [ [ -n $GM_API_KEY ] ] ; then
gm = $( curl -s " https://maps.googleapis.com/maps/api/geocode/json?latlng= ${ lat } , ${ long } &sensor=false&key= $GM_API_KEY " | jq -r '.results[0].address_components' )
city = $( echo " $gm " | jq '. | map( select( .types | contains(["locality"]) ) ) | .[].long_name' )
code = $( echo " $gm " | jq '. | map( select( .types | contains(["postal_code"]) ) ) | .[].long_name' )
state = $( echo " $gm " | jq '. | map( select( .types | contains(["administrative_area_level_2"]) ) ) | .[].long_name' )
region = $( echo " $gm " | jq '. | map( select( .types | contains(["administrative_area_level_1"]) ) ) | .[].long_name' )
country = $( echo " $gm " | jq '. | map( select( .types | contains(["country"]) ) ) | .[].long_name' )
printf " %-11s %-35s \n" "CP / City:" " ${ code // \" / } ${ city // \" / } "
printf " %-11s %-35s \n" "State:" " ${ state // \" / } "
printf " %-11s %-35s \n" "Region:" " ${ region // \" / } "
printf " %-11s %-35s \n" "Country:" " ${ country // \" / } "
#url="https://maps.googleapis.com/maps/api/staticmap?center=$lat,$long&zoom=14&size=400x400&key=$GM_API_KEY"
url = " https://maps.googleapis.com/maps/api/staticmap?center= $lat , $long &zoom= $zoom &markers=color: $color %7Clabel: $label %7C $lat , $long &maptype= $type &size= $map_size &key= $GM_API_KEY "
#curl "https://maps.googleapis.com/maps/api/staticmap?center=47.1275353416667,4.78201903333333&zoom=14&size=400x400&key=AIzaSyD94L2Q4K9_ErGSarTBN4FrUxDSspGzNhY" --output /tmp/gm.png
gm_path = /tmp/k2i/gm.png
curl -s " $url " --output $gm_path
if [ -f " $gm_path " ] ; then
printf " \n\t\033]1337;File=;width= $(( gm_width * 2 )) px;inline=1:`cat $gm_path | base64`\a\n "
fi
fi
fi
fi
printf " %-11s %-35s \n" "Comment:" " ${ comment } "
printf " %-11s %-35s \n" "Artist:" " ${ artist } "
printf " %-11s %-35s \n" "Copyright:" " ${ copyright } "
echo
fi
# gps
if [ $opt_gps = true ] ; then
if [ $gps -eq 1 ] ; then
echo -e " ${ red } GPS data available ! ${ reset } "
d = $( echo -e " Do you want to ${ bold } erase GPS data ${ reset } ? (k)eep or (e)rase " )
read -p " $d " 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
# copyright
if [ $opt_copyright = false ] ; then
b = $( echo -e " Do you want to ${ bold } erase Artist and Copyright data ${ reset } ? (k)eep or (e)rase " )
read -p " $b " choice
if [ " $choice " = = "e" ] || [ " $choice " = = "E" ] ; then
echo "Erasing Artist and Copyright data..."
#a="-EXIF:Artist= -IPTC:By-line= -XMP:Creator="
#c="-EXIF:Copyright= -IPTC:CopyrightNotice= -XMP:Rights="
exiftool -EXIF:Artist= -IPTC:By-line= -XMP:Creator= -EXIF:Copyright= -IPTC:CopyrightNotice= -XMP:Rights= " $file "
fi
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
@@ -216,45 +566,140 @@ do
[ [ " $k_fr " = *" " * ] ] && keyword_flickr += " \" ${ k_fr } \" " || keyword_flickr += " ${ k_fr } "
[ [ " $k_en " = *" " * ] ] && keyword_flickr += " \" ${ k_en } \" " || keyword_flickr += " ${ k_en } "
keyword_insta += " # ${ k_fr // / } # ${ k_en // / } "
[ [ " $k_fr " = *" " * ] ] && keyword_ccpx += " ${ k_fr } , " || keyword_ccpx += " ${ k_fr } , "
[ [ " $k_en " = *" " * ] ] && keyword_ccpx += " ${ k_en } , " || keyword_ccpx += " ${ k_en } , "
else
[ [ " $k_fr " = *" " * ] ] && keyword_flickr += " \" ${ k_fr } \" " || keyword_flickr += " ${ k_fr } "
[ [ " $k_fr " = *" " * ] ] && keyword_ccpx += " ${ k_fr } , " || keyword_ccpx += " ${ 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
model_flickr += " ${ i } "
fi
model_ccpx += " ${ i } , "
model_insta += " # ${ i // / } " # supprime tous les espaces et ajoute le #
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' ) "
lens_ccpx += " ${ l } , "
for i in " ${ wild [@] } "
@@ -264,8 +709,8 @@ 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' ) "
wildlife_ccpx += " ${ i } , "
wildlife_insta += " # $( echo " ${ i } " | iconv -s -f UTF-8-MAC -t ascii//translit | sed 's/[^a-zA-Z 0-9]//g' | sed 's/ //g' ) "
done
for i in " ${ nat [@] } "
@@ -275,7 +720,8 @@ do
else
nature_flickr += " ${ i } "
fi
nature_insta += " # $( echo " ${ i } " | iconv -f UTF-8-MAC -t ascii//translit | sed 's/[^a-zA-Z 0-9]//g' | sed 's/ //g' ) "
nature_ccpx += " ${ i } , "
nature_insta += " # $( echo " ${ i } " | iconv -s -f UTF-8-MAC -t ascii//translit | sed 's/[^a-zA-Z 0-9]//g' | sed 's/ //g' ) "
done
for i in " ${ reg [@] } "
@@ -285,7 +731,8 @@ do
else
region_flickr += " ${ i } "
fi
region_insta += " # $( echo " ${ i } " | iconv -f UTF-8-MAC -t ascii//translit | sed 's/[^a-zA-Z 0-9]//g' | sed 's/ //g' ) "
region_ccpx += " ${ i } , "
region_insta += " # $( echo " ${ i } " | iconv -s -f UTF-8-MAC -t ascii//translit | sed 's/[^a-zA-Z 0-9]//g' | sed 's/ //g' ) "
done
@@ -326,31 +773,37 @@ if [ $opt_all = false ]; then
if [ $opt_wildlife = false ] ; then
wildlife_flickr = ""
wildlife_insta = ""
wildlife_ccpx = ""
fi
if [ $opt_nature = false ] ; then
nature_flickr = ""
nature_insta = ""
nature_ccpx = ""
fi
if [ $opt_region = false ] ; then
region_flickr = ""
region_insta = ""
region_ccpx = ""
fi
if [ $opt_lens = false ] ; then
lens_flickr = ""
lens_insta = ""
lens_ccpx = ""
fi
if [ $opt_model = false ] ; then
model_flickr = ""
model_insta = ""
model_ccpx = ""
fi
fi
keywords_flickr = " $keyword_flickr $model_flickr $lens_flickr $wildlife_flickr $nature_flickr $region_flickr "
keywords_ccpx = " $keyword_ccpx $model_ccpx $lens_ccpx $wildlife_ccpx $nature_ccpx $region_ccpx "
keywords_insta = $( echo " $keyword_insta $model_insta $lens_insta $wildlife_insta $nature_insta $region_insta " | awk '{print tolower($0)}' )
if [ $opt_others = true ] ; then
@@ -370,13 +823,17 @@ if [ $opt_others = true ]; then
[ [ " $i " = *" " * ] ] && others_flickr += " \" ${ i } \" " || others_flickr += " ${ i } "
[ [ " $o_en " = *" " * ] ] && others_flickr += " \" ${ o_en } \" " || others_flickr += " ${ o_en } "
others_insta += " # ${ i // / } # ${ o_en // / } "
[ [ " $i " = *" " * ] ] && others_ccpx += " ${ i } , " || others_ccpx += " ${ i } , "
[ [ " $o_en " = *" " * ] ] && others_ccpx += " ${ o_en } , " || others_ccpx += " ${ o_en } , "
else
[ [ " $i " = *" " * ] ] && others_flickr += " \" ${ i } \" " || others_flickr += " ${ i } "
[ [ " $i " = *" " * ] ] && others_ccpx += " ${ i } , " || others_ccpx += " ${ i } , "
others_insta += " # ${ i // / } "
fi
done
keywords_flickr += " $others_flickr "
keywords_insta += " $others_insta "
keywords_ccpx += " ${ others_ccpx : 0 :- 1 } "
fi
@@ -390,7 +847,8 @@ if ! command -v iconv &> /dev/null; then
echo -e " - brew install iconv"
echo -e ""
else
keywords_insta = $( echo " $keywords_insta " | iconv -f UTF-8-MAC -t ascii//translit | sed 's/[^a-zA-Z 0-9 \#]//g' )
###
keywords_insta = $( echo " $keywords_insta " | iconv -s -f UTF-8-MAC -t ascii//translit | sed 's/[^a-zA-Z 0-9 \#]//g' )
fi
@@ -402,11 +860,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
@@ -418,8 +877,7 @@ if [ "$insta" = true ]; then
echo -e " \n ${ bold } The Instagram's tags are available in your clipboard ! ${ reset } "
echo " $keywords_insta "
echo -e "\nPress <Enter> to get the Flickr' tags... "
read -p ""
[ " $flickr " = true ] || [ " $ccpx " = true ] && echo -e "\nPress <Enter> to get the Flickr's or the 500px's tags..." && read -p " "
fi
@@ -432,4 +890,19 @@ if [ "$flickr" = true ]; then
[ " $insta " = true ] && echo -e " \n ${ bold } Here the Flickr's tags too ! ${ reset } " || echo -e " \n ${ bold } The Flickr's tags are available in your clipboard ! ${ reset } "
echo " $keywords_flickr "
" $ccpx " = true ] && echo -e "\nPress <Enter> to get the 500px's tags..." && read -p ""
fi
if [ " $ccpx " = true ] ; then
if [ [ " $OSTYPE " = = "linux-gnu" ] ] && [ -x " $( command -v xsel) " ] ; then
xsel -b <<< " $keywords_ccpx "
elif [ [ " $OSTYPE " = = "darwin" * ] ] && [ -x " $( command -v pbcopy) " ] ; then
pbcopy <<< " $keywords_ccpx "
fi
#[ "$insta" = true ] && echo -e "\n${bold}Here the Flickr's tags too !${reset}" || echo -e "\n${bold}The Flickr's tags are available in your clipboard !${reset}"
[ " $insta " = true ] || [ " $flickr " = true ] && echo -e " \n ${ bold } Here the 500px's tags too ! ${ reset } " || echo -e " \n ${ bold } The 500px's tags are available in your clipboard ! ${ reset } "
echo " $keywords_ccpx "
fi