はじめに(この記事の背景)
思考支援ツールのObsidianで、ローカルへのリンクを挿入できて、これがかなり便利。
ローカルへのリンクを
[ファイル・フォルダ名](<file:///フルパス>)
という形式で書いておくと、ワンクリックでファイルも開けるし、フォルダも開ける。Markdownってステキ。
あまりにも便利でよく使うので、手作業でリンクを作るのが面倒くさくなってきた。Alfredスニペットも作ったけど、それでもめんどくさくて、1クリックでリンクを作ってほしくなった。
で、Automator + シェルスクリプトにがんばってもらうことにした。
意外とハマりどころがあったので、将来の自分のために記録しておく。
環境
ここで書いていることは、下記のバージョンで実施しました。
- Obsidian v0.12.5
- Automator バージョン2.10 (509)
- macOS BigSur 11.4
Automatorの全体
新規書類 > クイックアクション
でファイルを作成。
コード
だいたい見たとおり。
# LANG環境変数を設定
export LANG=ja_JP.UTF-8
# 連結用文字列を設定
str1="["
str2="]"
str3="(<file://"
str4=">)"
# Obsidianで使えるMarkdown形式のローカルリンクを作成
for f in "$@"
do
# echo "$f"
# basenameを取得(/から前を削除)
fn=$(basename "$f")
# echo "$fn"
echo "$str1$fn$str2$str3$f$str4" | pbcopy
done
ハマりどころ
クイックアクションのファイルはどこにあるのか
いつもこれがわからなくなるのだが……/Users/ユーザ名/Library/Services
。
Finder
でoption + 移動
でライブラリ
が出てくるので、ここからアクセスするのが速い。
02. Automator クイックアクション削除時にservicesフォルダが表示されない
文字化け
$ echo $boo$foo | pbcopy
とすると、[蜊ー蛻キ](<file:///Users/mmmm/Desktop/蜊ー蛻キ>)
みたいに、文字化けしてしまう。
pbcopy(1) osx man pageによると、LANG環境変数を設定しておかないといけないようなので、
export LANG=ja_JP.UTF-8
の行を入れてやると、無事解決した。
あるいは、シェルスクリプトの実行
の後ろに、クリップボードにコピー
を追加する手もある(自動的に文字コードを変換して良いようにしてくれる)。
フルパスに半角スペースが含まれている場合
fn=$(basename $f)
と書いてしまうと、たとえば/Library/User Pictures/Animals/Eagle.tif
といった場合、期待するEagle.tif
ではなく、Pictures
を取って来てしまう。
そこで
fn=$(basename "$f")
としておいた。
デバッグのコツ
クイックアクションを動かそうと思って実行
ボタンを押しても、入力を指定できない。
そこで、デバッグ用に、一時的にFinder項目の選択を求める
を追加しておくと便利。実行
ボタンを押すたびにファイルを指定しなければならないが、結果
に$ echo
の出力を表示できる。
過去記事
Automator+シェルスクリプトのツール。
【記録】ファイルを複製し、日付部分を変更する【macOS Automator シェルスクリプト】
【記録】ファイルを複製し、日付を変更する(その2)
【記録】ファイルを複製し、日付を変更する(その3)
リソース
01. Obsidian - A second brain, for you, forever.
02. Automator クイックアクション削除時にservicesフォルダが表示されない
03. pbcopy(1) osx man page
04. 【記録】ファイルを複製し、日付部分を変更する【macOS Automator シェルスクリプト】
05. 【記録】ファイルを複製し、日付を変更する(その2)
06. 【記録】ファイルを複製し、日付を変更する(その3)