Search code examples
macosbashautomator

Get folder path/content in a Mac Service


I have a nice working Folder Action, which watermarks every picture in a folder and put them in a folder.

watermark=~/Dropbox/Business/mihalko_logo_bw.png
shopt -s nocasematch
for f; do
  [[ $f =~ .*\.(jpe?g|png)$ ]] || continue
  d="${f%/*}/wm_$(date +%Y_%m_%d)"
  mkdir -p "$d"
  target="$d/${f##*/}"
  size=$(/usr/local/bin/identify -format '%[fx:w/4,279]' "$f")
  /usr/local/bin/composite -dissolve 10% -gravity SouthEast\
  \( $watermark -geometry $size \) "$f" -quality 100 "$target"
  rm $f
done
~/imageoptim-cli/bin/imageOptim --jpeg-mini --image-alpha --quit --directory "$d"

Unfortunatelly, FA is working only in one directory. I tried to create a Service from this code, without success. Does anybody knows what modifications/automator action are needed in this case?


Solution

  • Using an associative array:

    watermark=~/Dropbox/Business/mihalko_logo_bw.png
    shopt -s nocasematch
    
    declare -A dirs
    
    for f; do
      [[ $f =~ .*\.(jpe?g|png)$ ]] || continue
      d="${f%/*}/wm_$(date +%Y_%m_%d)"
      mkdir -p "$d"
      dirs["$d"]="$d"
      target="$d/${f##*/}"
      size=$(/usr/local/bin/identify -format '%[fx:w/4,279]' "$f")
      /usr/local/bin/composite -dissolve 10% -gravity SouthEast\
      \( "$watermark" -geometry $size \) "$f" -quality 100 "$target"
      rm "$f"
    done
    
    for d in "${dirs[@]}"; do
      ~/imageoptim-cli/bin/imageOptim --jpeg-mini --image-alpha --quit --directory "$d"
    done