===== Автоматическое удаление старых файлов ("Демон" как планировщик задач в 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~~