はじめに(この記事の背景)
思考支援ツールの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)
