Вики IT-KB

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

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

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


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

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

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

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

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

Для синхронизации каталогов по заданному расписанию, необходимо удалить или закомментировать в скрипте строки 1, 2, 3, 6, 50, 51, 52, 53 и создать демона, как это описано здесь.


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

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

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

Обсуждение

Ваш комментарий:
 
apple-mac-os/macos-ventura/automatic-synchronization-of-files-and-directories-on-macos.txt · Последнее изменение: 09.01.2023 12:46 — Алексей Максимов

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki