У меня есть сетевой диск, подключенный к Airport Extreme, поэтому он доступен, когда я нахожусь в моей домашней сети Wi-Fi. Я хотел бы автоматически перемещать файлы из определенной папки в определенную папку на сетевом диске, когда она доступна. Какой лучший способ автоматизировать это?
1 ответ
Если вы установите для launchd
значение Monitor /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
Он будет загружен автоматически при входе в систему и выгружен при выходе.