MacにSDカード挿したら勝手に取り込んでくれるlaunchctl
あまり検証はしてない。許して
何をしたい?
編集のためにカメラで撮った写真をMacに取り込む際、毎回rsync -auvP --ignore-existing /Volumes/NIKON\ Z\ F\ \ /DCIM/100NCZ_F/* /Users/matac/Pictures/NIKON\ Z\ f/を手動で実行するのがだるいのでSDカードを挿したら勝手に取り込んでくれるようにしたい
方法
以下をやれば勝手に取り込んでくれるようになるはず
マウントポイントの名前とか、ファイル名とかrsyncで指定してるやつとかは適宜変更してね
まずlaunchctlのxmlを作成する
ファイル名は多分適当でよいが/Library/LaunchDaemons/配下に作成し以下を実行
chmod 644 /Library/LaunchDaemons/info.matac.zfsd.plist
chown root:wheel /Library/LaunchDaemons/info.matac.zfsd.plist
launchctl bootstrap system /Library/LaunchDaemons/info.matac.zfsd.plist
後からxmlを修正したらlaunchctl bootout system /Library/LaunchDaemons/info.matac.zfsd.plistでbootoutしてから再度bootstrapすると良いはず
code:/Library/LaunchDaemons/info.matac.zfsd.plist
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>Label</key>
<string>info.matac.zfsd</string>
<key>ProgramArguments</key>
<array>
<string>/bin/zsh</string>
<string>/Users/matac/ws/bin/zfsd.sh</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Volumes</string>
</array>
</dict>
</plist>
SDカードからファイルを取り込むスクリプトを作成する
chmod +xしておくと良いかも
code:/Users/matac/ws/bin/zfsd.sh
rsync -auvP --ignore-existing /Volumes/NIKON\ Z\ F\ \ /DCIM/100NCZ_F/* /Users/matac/Pictures/NIKON\ Z\ f/
afplay /System/Library/Sounds/Glass.aiff
SDカードを挿す
取り込み完了したら音が鳴るはず
補足的な
launchctlのWatchPathsは指定したディレクトリ配下で何かしら変化があったときにスクリプトを実行したりできるようになる。SDカードを挿すと/Volumes/配下に変化が発生することを利用している。活用方法はいろいろありそうだ。
取り込み完了したらとりあえずafplayで音を鳴らすようにしているが、osascriptで通知を出したりunmountでアンマウントしたりすることもできるかもしれないし、できないかもしれない。権限周りや実行ユーザ周りがめんどかったので誰かやってくれ。