Вики IT-KB

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

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

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


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

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
apple-mac-os:macos-ventura:automatic-synchronization-of-files-and-directories-on-macos [09.01.2023 12:46] – создано Алексей Максимовapple-mac-os:macos-ventura:automatic-synchronization-of-files-and-directories-on-macos [08.11.2023 20:41] (текущий) Виталий Якоб
Строка 2: Строка 2:
  
 {{:apple-mac-os:macos-monterey:pasted:20220323-155615.png }} Иногда возникает необходимость периодически синхронизировать какие-то рабочие файлы или каталоги со съёмным накопителем или сетевым ресурсом. В **macOS** подобную задачу можно автоматизировать. Например, при каждом монтировании съёмного накопителя с определённым именем раздела содержимое перечисленных каталогов будет синхронизировано с этим съёмным накопителем. {{:apple-mac-os:macos-monterey:pasted:20220323-155615.png }} Иногда возникает необходимость периодически синхронизировать какие-то рабочие файлы или каталоги со съёмным накопителем или сетевым ресурсом. В **macOS** подобную задачу можно автоматизировать. Например, при каждом монтировании съёмного накопителя с определённым именем раздела содержимое перечисленных каталогов будет синхронизировано с этим съёмным накопителем.
 +В данном примере выполняется синхронизация перечисленных каталогов в ~/Documents/Портфель.
  
-Сохраним **AppleScript** скрипт в расположении ''~/Library/Workflows/Applications/Folder Actions'' с именем ''Sync folder to removable disk.scpt''+Сохраним **AppleScript** скрипт в расположении ''~/Library/Scripts/Folder Action Scripts'' с именем ''Sync folder to removable disk.scpt''
  
  
-<code applescript Sync folder to removable disk.scpt>on adding folder items to this_folder after receiving MountedVolumes+<code applescript Sync folder to removable disk.scpt> 
 +on adding folder items to this_folder after receiving MountedVolumes 
 + set SyncRootFolder to "Портфель"
  repeat with MountedVolume in MountedVolumes  repeat with MountedVolume in MountedVolumes
   tell application "Finder"   tell application "Finder"
    --Имя раздела внешного диска    --Имя раздела внешного диска
    set RemovableDiskName to "Flash"    set RemovableDiskName to "Flash"
-   if (local volume of MountedVolume) and (name of MountedVolume is RemovableDiskName) then+   if (local volume of disk MountedVolume) and (name of disk MountedVolume is RemovableDiskName) then
     --Имена синхронизируемых каталогов     --Имена синхронизируемых каталогов
     set SyncFolders to {¬     set SyncFolders to {¬
      "Проект А", ¬      "Проект А", ¬
      "Проект Б", ¬      "Проект Б", ¬
-     "Инструкции для поддержки"}+     "Инструкции тех. поддержки", ¬ 
 +     "Test"}
     repeat with SyncFolder in SyncFolders     repeat with SyncFolder in SyncFolders
-     set SourcePath to quoted form of ("/Users/test001/Documents/" & SyncFolder & "/"+     --Синхронизация 
-     set DestinationPath to quoted form of ("/Volumes/" & RemovableDiskName & "/" & SyncFolder) +     my StartSync(SyncRootFolderSyncFolder, RemovableDiskName)
-     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     end repeat
-    --Раскомментировать если необходимо отключение внешнего диска после выполнение синхронизации +    --Раскомментироватьесли необходимо отключать носитель после завершения синхронизации 
-    (+    --my UnmountDisk(RemovableDiskName)
-delay 5 +
-try +
- tell application "Finder" to eject RemovableDiskName +
-end try +
-*)+
    end if    end if
   end tell   end tell
  end repeat  end repeat
-end adding folder items to</code>+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 
 +</code>
  
 Чтобы установить скрипт, через Spotlight вызываем "Настройка действий папки.app" или "Folder Action Setup.app": Чтобы установить скрипт, через Spotlight вызываем "Настройка действий папки.app" или "Folder Action Setup.app":
Строка 69: Строка 66:
  
 {{ :apple-mac-os:macos-ventura:pasted:20230109-123922.png }} {{ :apple-mac-os:macos-ventura:pasted:20230109-123922.png }}
- 
-Для синхронизации каталогов по заданному расписанию, необходимо удалить или закомментировать в скрипте строки 1, 2, 3, 6, 50, 51, 52, 53 и создать демона, как это описано [[apple-mac-os:macos-monterey:automatic-deletion-of-old-files-daemon-as-task-scheduler-in-macos|здесь]]. 
  
  
Строка 77: Строка 72:
 ^ Версия ОС                                   ^ ^ Версия ОС                                   ^
 | Apple macOS Ventura (13.0)  | | Apple macOS Ventura (13.0)  |
 +| Apple macOS Sonoma (14.0)  |
  
 ---- ----
apple-mac-os/macos-ventura/automatic-synchronization-of-files-and-directories-on-macos.1673257562.txt.gz · Последнее изменение: 09.01.2023 12:46 — Алексей Максимов

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki