在OSX下挂载特定磁盘/存储卡时运行脚本

在OSX下挂载特定磁盘/存储卡时运行脚本

当驱动器安装在 OSX 下时,如何运行脚本?

我的用例是,当 USB 内存/硬盘插入 USB 读卡器时,我想自动从中复制图像,当插入 DVD 或 CD 时,我想将其复制并存储在媒体中心。

我尝试过使用 Marco Polo(如这个相关问题),但据我所知,它只能检测到某个 USB 设备的存在,而不能检测到特定硬盘的存在。

答案1

您可以编写一个用户启动守护程序,在文件系统挂载时运行。此处的线程http://forums.macosxhints.com/archive/index.php/t-89968.html应该可以帮助你入门。

您需要编写一个 launchd plist,当任何文件系统挂载时,它会运行一个脚本。然后,您的脚本应该检查您感兴趣的卷是否已挂载,然后执行它需要执行的任何操作。

您需要以 root 还是用户身份运行它?这将决定您的 plist 是进入 /Library/LaunchDaemons 还是 ~/Library/LaunchDaemons。如果是后者,它将仅在用户登录时运行。

更新 - emmby 指出 URL 不再有效。总之,您需要在启动守护程序中使用 StartOnMount 键。例如(复制自http://stuff-things.net/2015/03/18/backups-with-rsync-and-launchd/):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>net.stuff-things.backup-to-dropbox</string>
    <key>ProgramArguments</key>
    <array>
      <string>/Users/spike/bin/backup-to-dropbox</string>
    </array>
    <key>StartOnMount</key>
    <true/>
  </dict>
</plist>

相关内容