Ich habe ein Bash-Skript , das wie ein Thread funktioniert. Jetzt möchte ich es in einen Dienst mit Automator verwandeln.
Input ist in Automator auf Image Files gesetzt und die Shell-Script-Aktion ist auf Pass input as arguments
.
Automator beanstandet zwei Dinge:
Im Protokoll wird jedoch kein Fehler angezeigt und das Ergebnis des Shell-Skripts ist leer:
(
""
)
Die Funktion createDatePath
prüft, ob das übergebene Bild wie folgt formatiert ist 2020-08-10-demo_image.jpg
und erstellt einen Ordner YEAR/MONTH/
im Zielverzeichnis. Die if-Bedingung führt Aktionen für die Eingabe aus, je nachdem, ob es sich um ein JPEG oder ein PNG handelt und ob auf die Datumszeichenfolge eine Zeichenfolge folgt -qq-
. Dies ist eine abgespeckte Version des Skripts (ich habe einige oder mehr if-Bedingungen, aber wir brauchen sie hier nicht, denke ich).
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
Bildschirmfoto:
Link zum vollständigen Shell-Skript: https://gist.github.com/pattulus/a89be63478174853d667
Wenn mir jemand erklären könnte, warum das nicht funktioniert und wie man es zum Laufen bringt, wäre das großartig.
PS: Im Nicht-Automator-Skript war das erste, was ich getan habe, cd
der Quellpfad, aber da dies als Dienst enden wird, der Dateien als Eingabe verwendet, war meine Vermutung, dass ich dies weglassen kann (Hinzufügen hat cd "$@"
nichts gebracht ).
Die Argumente, die Automator an das Skript übergibt, sind absolute Pfade. Sie können sie mit etwas wie in Basisnamen umwandeln i=${i##*/}
.
kein Hang
Patrick