loadingloadingloadingloadingloadingloadingloadingloading loadingloadingloadingloadingloadingloadingloadingloading

pngquant と Automator を使って Finder から秒で PNG を圧縮できるようにショートカットを作ろうとしたら一瞬つまづいたのでメモします。

先に答え

中括弧 {} じゃなくて丸括弧 () を使え!


やりたいこと

  • 出力ファイル名に quality の値とタイムスタンプを入れたい

–ext オプションをデフォルトにするとファイル名の後に -fs8 とつきますがどうせなら品質とタイムスタンプ(厳密にいつ出力したかわかる & 出力順に並ぶ)に変えたいと思いました。

-ext オプションをデフォルトにしたときの出力ファイル名
何もしないと -fs8 とついてしまう

最初のコード

とりあえず以下のように書いて走らせたら “Bad substitution” とエラーが出ました(チッ):

source ~/.zshrc

quality=90
TIME=${date +"%Y%m%d%H%M%S"}
/usr/local/bin/pngquant --quality=quality --ext -${quality}q-${TIME}.png --force $@
エラーメッセージ: The action "Run Shell Script" encountered an error: "Zsh:7:bad substitution"
エラーポップアップ

落とし穴

ググってみると、TIME= の行がダメっぽいということが判明。
変数に代入するときは中括弧 (Curly brackets) {} ではなく丸括弧 (Parentheses) () を使うのがコツみたいです。

これでいけました:

source ~/.zshrc

quality=90
TIME=$(date +"%Y%m%d%H%M%S")
/usr/local/bin/pngquant --quality=quality --ext -${quality}q-${TIME}.png --force $@

オレンジの部分

画像出力結果。

願い通りに quality の値とタイムスタンプが出ました。長いですが重複して意図せず上書きしてしまうことがないので安心です(まあ –force 外せばいいんだろうけど)。あとどうせ使うやつだけ最終的に名前調整するのでね。

めでたしめでたし。





………


余談ですが、デスクトップやダウンロードフォルダみたいなアクセスしやすいところに Automator ファイルのエイリアスを置いておくと編集しやすいです

*個人の好みです