Вики IT-KB

Пошаговые руководства, шпаргалки, полезные ссылки...

Инструменты пользователя

Инструменты сайта


apple-mac-os:macos-ventura:automatic-synchronization-of-files-and-directories-on-macos

Автоматическая синхронизации файлов и каталогов в macOS

Иногда возникает необходимость периодически синхронизировать какие-то рабочие файлы или каталоги со съёмным накопителем или сетевым ресурсом. В macOS подобную задачу можно автоматизировать. Например, при каждом монтировании съёмного накопителя с определённым именем раздела содержимое перечисленных каталогов будет синхронизировано с этим съёмным накопителем. В данном примере выполняется синхронизация перечисленных каталогов в ~/Documents/Портфель.

Сохраним AppleScript скрипт в расположении ~/Library/Scripts/Folder Action Scripts с именем Sync folder to removable disk.scpt

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»:

  1. С помощью кнопки «+» вызываем Finder для выбора каталога;
  2. Нажимаем Command+Shift+G и переходим в корневой каталог «/»;
  3. Включаем отображение скрытых файлов и каталогов Command+Shift+>;
  4. Выбираем каталог «Volumes»;
  5. С помощью кнопки «+» добавляем скрипт;
  6. Ставим галочку «Включить действия папки».


Проверено на следующих конфигурациях:

Версия ОС
Apple macOS Ventura (13.0)
Apple macOS Sonoma (14.0)

Автор первичной редакции:
Виталий Якоб
Время публикации: 09.01.2023 12:34

Обсуждение

Ваш комментарий:
 
apple-mac-os/macos-ventura/automatic-synchronization-of-files-and-directories-on-macos.txt · Последнее изменение: 08.11.2023 20:41 — Виталий Якоб

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki