Вики 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
	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. Ставим галочку «Включить действия папки».

Для синхронизации каталогов по заданному расписанию, необходимо удалить или закомментировать в скрипте строки 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.1689923113.txt.gz · Последнее изменение: Виталий Якоб

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki