Автоматически перемещать файлы на внешний диск, когда он доступен

1083
Evan

У меня есть сетевой диск, подключенный к Airport Extreme, поэтому он доступен, когда я нахожусь в моей домашней сети Wi-Fi. Я хотел бы автоматически перемещать файлы из определенной папки в определенную папку на сетевом диске, когда она доступна. Какой лучший способ автоматизировать это?

1
Я возился с [Hazel] (http://www.noodlesoft.com/hazel.php), и он работает, но выдает ошибку Growl, если попытается переместить файлы, когда внешний диск недоступен. fideli 13 лет назад 0

1 ответ на вопрос

2
Scott

Если вы настроили launchdмониторинг /Volumesкак WatchPath, он может запускать скрипт каждый раз при монтировании диска. Просто создайте этот сценарий, который проверяет, смонтирован ли ваш диск Airport Extreme, а затем запускает копию, если она есть. Например:

#!/bin/bash  if [ -e /Volumes/AirportExtremeDriveName ] rsync -aE /a/specific/folder/ /Volumes/AirportExtremeDriveName/another/specific/folder/ fi 

Я полагаю, rsyncчто он достаточно умен, чтобы не копировать одинаковые файлы как в источнике, так и в месте назначения, что ускорит процесс. Если вы добавите -deleteаргумент, все файлы, которых больше нет в источнике, будут удалены из места назначения.

Без дополнительных затрат, вот launchdсценарий. Сохраните следующее в~/Library/LaunchAgents/some.meaningful.name.plist

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <dict> <key>Label</key> <string>some.meaningful.name</string>  <key>LowPriorityIO</key> <true/>  <key>ProgramArguments</key> <array> <string>/where/you/saved/your/script.sh</string> </array>  <key>WatchPaths</key> <array> <string>/Volumes</string> </array> </dict> </plist> 

Затем загрузите launchdработу с:

launchctl load ~/Library/LaunchAgents/some.meaningful.name.plist 

Он будет загружен автоматически при входе в систему и выгружен при выходе.