コマンドラインでairdropを使う

2014/12/13追記: yosemite版を追記しました

社内のPCがほとんどMacなのでファイルのやりとりも自然とairdropが多くなります。

問題はその度にFinderを開かなければいけないことです。 alfredのairdropのworkflowとか入れてみたけど、なんかしっくりこないし。

というわけでコマンドラインで扱えるようにしましょう。

受け取る

10.9(Mavericks)以前

こちらのapple scriptを使うのが一番シンプルだと思います。

#!/usr/bin/osascript
tell application "Finder"
    activate
    tell application "System Events" to keystroke "R" using {command down, shift down}
end tell

ライセンスが明記されてないので、一応自己責任ということで。

10.10(Yosemite)以降

上記のスクリプトYosemiteで動かなくなってしまったので、改良しました。 ちなみにYosemiteではJXAと呼ばれる、JSのコード形式でApplescriptを実行できる機能が提供されているため、JSで書きました。

#!/usr/bin/env osascript -l JavaScript

function run() {
  finder = Application('Finder');
  finder.activate();
  delay(1); // sleep

  event = Application('System Events');
  event.keystroke('R', {using: ['command down', 'shift down']});
}

送る

これもapple scriptで解決できるかなーと頑張ってみました。しかしAXShowMenuでFinderのコンテキストメニューを出したところまでは良かったんですが、メニュー選択ができず断念。

色々探してみた結果、こちらのgemにたどり着きました。

# インストール
gem install terminal-share
source ~/.zshrc

# 実行
terminal-share -service airdrop -url file:///Users/akiomi/.vimrc

これを毎回打つのも面倒なので、シェルスクリプトを作りました。ライセンスはNYSLということで。

#!/bin/sh

if [ $# -ne 1 ]; then
  echo "usage: $0 FILE" 1>&2
  exit 1
fi

if [ ! -e $1 ]; then
  echo "$1: No such file or directory" 1>&2
  exit 1
fi

target=file://$(cd $(dirname $1) && pwd)/$(basename $1)
terminal-share -service airdrop -url $target

これで快適にファイルのやり取りができそうです。