Пошаговые руководства, шпаргалки, полезные ссылки...
БлогФорумАвторы
Полезные Online-сервисы
Перечень Бесплатного ПО
Подписка на RSS-канал
Это старая версия документа!
Иногда возникает необходимость периодически синхронизировать какие-то рабочие файлы или каталоги со съёмным накопителем или сетевым ресурсом. В macOS подобную задачу можно автоматизировать. Например, при каждом монтировании съёмного накопителя с определённым именем раздела содержимое перечисленных каталогов будет синхронизировано с этим съёмным накопителем.
Сохраним AppleScript скрипт в расположении ~/Library/Workflows/Applications/Folder Actions с именем Sync folder to removable disk.scpt
~/Library/Workflows/Applications/Folder Actions
Sync folder to removable disk.scpt
on adding folder items to this_folder after receiving MountedVolumes repeat with MountedVolume in MountedVolumes tell application "Finder" --Имя раздела внешного диска set RemovableDiskName to "Flash" if (local volume of MountedVolume) and (name of MountedVolume is RemovableDiskName) then --Имена синхронизируемых каталогов set SyncFolders to {¬ "Проект А", ¬ "Проект Б", ¬ "Инструкции для поддержки"} repeat with SyncFolder in SyncFolders set SourcePath to quoted form of ("/Users/test001/Documents/" & SyncFolder & "/") set DestinationPath to quoted form of ("/Volumes/" & RemovableDiskName & "/" & SyncFolder) try set StartSync to do shell script "rsync -au --delete" & space & SourcePath & space & DestinationPath (* -a -- Режим архивирования, объединяет ключи -rlptgoD -u -- пропускает более новые файлы в месте назначения. --delete -- удаляет файлы в месте назначения, которые были удалены в исходном месте *) --Пауза для последовательного показа уведомлений delay 1 if StartSync = "" then display notification "Каталог" & space & quoted form of SyncFolder & space & ¬ "синхронизирован с съёмным диском" & space & RemovableDiskName with title "Синхронизация каталога" end if --Ошибки on error errorMessage number errorNumber --log ("(line #" & StartSync & ") errorMessage: " & errorMessage & ", errorNumber: " & errorNumber) if errorNumber = 12 then display dialog "На съёмном диске" & space & quoted form of RemovableDiskName & ¬ space & "недостаточно свободного пространства, чтобы сихронизировать каталог" & space & quoted form of SyncFolder buttons {"OK"} default button 1 with icon stop else if errorNumber = 23 then display dialog "Каталога" & space & SourcePath & space & ¬ "не существует." buttons {"OK"} default button 1 with icon stop else display dialog errorMessage buttons {"OK"} default button 1 with icon stop end if end try end repeat --Раскомментировать если необходимо отключение внешнего диска после выполнение синхронизации (* delay 5 try tell application "Finder" to eject RemovableDiskName end try *) end if end tell end repeat end adding folder items to
Чтобы установить скрипт, через Spotlight вызываем «Настройка действий папки.app» или «Folder Action Setup.app»:
Для синхронизации каталогов по заданному расписанию, необходимо удалить или закомментировать в скрипте строки 1, 2, 3, 6, 50, 51, 52, 53 и создать демона, как это описано здесь.
Проверено на следующих конфигурациях:
Автор первичной редакции: Виталий Якоб Время публикации: 09.01.2023 12:34