2

I have a bash script that works like a thread. Now I'd like to turn it into a service with Automator.

Input is set to Image Files in Automator and the shell script action is set to Pass input as arguments.

The problem:

Automator takes issue with two things:

  1. The function
  2. The if condition

However, no error shows up in the log and the shell script result is empty:

( "" ) 

What the script does:

The functioncreateDatePath checks if the passed image is formated like 2020-08-10-demo_image.jpg and creates a folder YEAR/MONTH/ in the target directory. The if condition performs actions on the input depending on whether it's an JPEG or an PNG, and whether the date string is followed by a -qq- string. This is a trimmed down version of the script (I have some of more if conditions, but we don't need them here I guess).

The script:

backup=/Users/me/Desktop/A/backup/ targetPath=/Users/me/Desktop/A/output/ function createDatePath { [[ "$i" =~ ^([0-9]{4})-([0-9]{2}) ]] && \ mkdir -p "$targetPath${BASH_REMATCH[1]}/${BASH_REMATCH[2]}"; } for i in "$@"; do cp "$i" "$backup" if [[ "$i" =~ ^([0-9]{4})-([0-9]{2})-([0-9]{2})-([^q]{2}).+\.((jpg)|(jpeg))$ ]]; then createDatePath; else exit 0; fi done 

Screen shot:

Demo Mode

Link to complete shell script:https://gist.github.com/pattulus/a89be63478174853d667

If anyone could explain to me why this doesn't work and how to make it work that'd be great.

PS: In the non-Automator script the first thing I did was cd into the source path, but I since this will end up as a service which takes files as input my guess was that I can omit this (adding cd "$@" didn't do any good).

2
  • 1
    Can you add a screenshot of the Automator workflow (or a link to a screenshot at least)?
    – nohillside
    CommentedAug 13, 2013 at 7:06
  • @patrix I added a screen shot and a link to a Gist of the complete script. When this works I'll delete the "Get Finder selection" action and set input to receive images.
    – patrick
    CommentedAug 13, 2013 at 8:22

1 Answer 1

3

The arguments Automator passes to the script are absolute paths. You can convert them to basenames with something like i=${i##*/}.

1
  • You really deserve my hand-crafted badge of honor for being in the right place at the right time.
    – patrick
    CommentedAug 13, 2013 at 11:29

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.