Пошаговые руководства, шпаргалки, полезные ссылки...
БлогФорумАвторы
Полезные Online-сервисы
Перечень Бесплатного ПО
Подписка на RSS-канал
Иногда возникает необходимость периодически синхронизировать какие-то рабочие файлы или каталоги со съёмным накопителем или сетевым ресурсом. В macOS подобную задачу можно автоматизировать. Например, при каждом монтировании съёмного накопителя с определённым именем раздела содержимое перечисленных каталогов будет синхронизировано с этим съёмным накопителем. В данном примере выполняется синхронизация перечисленных каталогов в ~/Documents/Портфель.
Сохраним AppleScript скрипт в расположении ~/Library/Scripts/Folder Action Scripts с именем Sync folder to removable disk.scpt
~/Library/Scripts/Folder Action Scripts
Sync folder to removable disk.scpt
on adding folder items to this_folder after receiving MountedVolumes set SyncRootFolder to "Портфель" repeat with MountedVolume in MountedVolumes tell application "Finder" --Имя раздела внешного диска set RemovableDiskName to "Flash" if (local volume of disk MountedVolume) and (name of disk MountedVolume is RemovableDiskName) then --Имена синхронизируемых каталогов set SyncFolders to {¬ "Проект А", ¬ "Проект Б", ¬ "Инструкции тех. поддержки", ¬ "Test"} repeat with SyncFolder in SyncFolders --Синхронизация my StartSync(SyncRootFolder, SyncFolder, RemovableDiskName) end repeat --Раскомментировать, если необходимо отключать носитель после завершения синхронизации --my UnmountDisk(RemovableDiskName) end if end tell end repeat end adding folder items to --Обработчик синхронизации on StartSync(SyncRootFolder, SyncFolder, RemovableDiskName) --Источник set SourcePath to quoted form of (POSIX path of (path to documents folder as text) & SyncRootFolder & "/" & SyncFolder & "/") --Назначение tell application "System Events" to set DestinationPath to quoted form of (POSIX path of disk item RemovableDiskName & "/" & SyncFolder as text) try do shell script "rsync -au --delete" & space & SourcePath & space & DestinationPath delay 1 display notification "Каталог" & space & quoted form of SyncFolder & space & ¬ "синхронизирован с съёмным диском" & space & RemovableDiskName with title "Синхронизация каталога" on error ErrorMessage set ErrorMessage to do shell script "echo" & space & quoted form of (ErrorMessage as text) & "| awk -F 'failed:' '{print$2}' | awk -F ' at ' '{print$1}'" display dialog "Копирование каталога" & space & quoted form of SyncFolder & space & "не выполнено." & ¬ return & "Failed:" & space & ErrorMessage buttons {"OK"} default button 1 with icon stop end try end StartSync --Обработчик размонтрования накопителя on UnmountDisk(RemovableDiskName) delay 5 tell application "Finder" to eject RemovableDiskName end UnmountDisk
Чтобы установить скрипт, через Spotlight вызываем «Настройка действий папки.app» или «Folder Action Setup.app»:
Проверено на следующих конфигурациях:
Автор первичной редакции: Виталий Якоб Время публикации: 09.01.2023 12:34