1

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

1 ответ1

2

Если вы установите для 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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .