===== Автоматическое удаление старых файлов ("Демон" как планировщик задач в macOS) ===== {{:apple-mac-os:macos-monterey:pasted:20220323-155615.png }} Ранее уже рассматривался способ автоматизации запуска запланированных задач с помощью [[apple-mac-os:macos-mojave:calendar-app-as-a-task-scheduler-in-macos-mojave|действия календаря]]. В этой заметке мы рассмотрим планировщик в виде пользовательского демона (agents) на примере задачи __автоматического удаления файлов старше 7 дней__ из каталога "**Загрузки**". Создадим скрипт **AppleScript** с именем ''Delete-files-from-downloads.scpt'' в расположении ''/Library/Scripts/Custom'' (* Original https://discussions.apple.com/thread/7230461 *) use AppleScript version "2.4" -- requires Mac OS X 10.11 (Yosemite) use scripting additions use framework "Foundation" my deleteOlderItems(POSIX path of (path to downloads folder)) on deleteOlderItems(thisPath) set thisURL to current application's |NSURL|'s fileURLWithPath:thisPath set oldDate to current application's NSDate's dateWithTimeIntervalSinceNow:(-86400 * 7) -- get date of 7 day ago set theNSFileManager to current application's NSFileManager's defaultManager() set allNSURLs to (theNSFileManager's contentsOfDirectoryAtURL:thisURL includingPropertiesForKeys:{current application's NSURLAddedToDirectoryDateKey} ¬ options:(current application's NSDirectoryEnumerationSkipsHiddenFiles) |error|:(missing value)) set mylist to {} repeat with theUrl in allNSURLs -- get the date added set {theResult, theValue, theError} to (theUrl's getResourceValue:(reference) forKey:(current application's NSURLAddedToDirectoryDateKey) |error|:(reference)) -- compare the date if theResult and (theValue's compare:oldDate) = -1 then set end of mylist to theUrl as alias end repeat if mylist is not {} then tell application "Finder" to delete mylist display notification "Очистка каталога Downloads выполнена." & return & "Удалено объектов:" & space & (count of mylist) end if end deleteOlderItems Далее создадим демона, в котором будут указаны параметры: - Путь до скрипта ''Delete-files-from-downloads.scpt'' - Параметры запуска
nano ~/Library/LaunchAgents/custom.delete.files.from.downloads.plist
Label custom.delete.files.from.downloads ProgramArguments osascript /Library/Scripts/Custom/Delete-files-from-downloads.scpt StartCalendarInterval Hour 10 Minute 0 Если существует потребность в более гибком расписании, то необходимо добавить в раздел **StartCalendarInterval**, дополнительные параметры: * **Month** - Порядковый номер месяца * **Weekday** - Порядковый номер дня недели, при этом 0 и 7 являются воскресением * **Day** - Порядковый номер дня Вместо указания даты и времени **StartCalendarInterval** можно использовать циклические запуски, например раз в сутки. StartInterval 86400 Загружаем демон в ОС:
launchctl load -w ~/Library/LaunchAgents/custom.delete.files.from.downloads.plist
Удостовериться в загрузке демона можно так:
launchctl list | grep custom
Во время первого запуска система запросит разрешения на выполнения и доступ в каталог. Таким образом, задача будет удалять в корзину файлы и каталоги старше 7 дней от имени текущего пользователя каждый день в 10:00. Каждое удаление сопровождается уведомлением. ---- Проверено на следующих конфигурациях: ^ Версия ОС ^ | Apple macOS Monterey (12.0) | | Apple macOS Ventura (13.0) | | Apple macOS Sonoma (14.0) | ---- {{:user:vyakob.png?50&nolink |}} Автор первичной редакции:\\ [[user:vyakob|Виталий Якоб]] \\ Время публикации: 23.03.2022 15:46 {{tag>Apple "Mac OS" macOS "macOS Monterey" AppleScript Script}} ~~DISCUSSION~~