Пошаговые руководства, шпаргалки, полезные ссылки...
БлогФорумАвторы
Полезные Online-сервисы
Перечень Бесплатного ПО
Подписка на RSS-канал
Ранее уже рассматривался способ автоматизации запуска запланированных задач с помощью действия календаря. В этой заметке мы рассмотрим планировщик в виде пользовательского демона (agents) на примере задачи автоматического удаления файлов старше 7 дней из каталога «Загрузки».
Создадим скрипт AppleScript с именем Delete-files-from-downloads.scpt в расположении /Library/Scripts/Custom
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) as integer = -1 then set end of mylist to (theUrl's |path|()) as text as POSIX file as alias end repeat if mylist is not {} then tell application "Finder" to delete mylist display notification "Очистка каталога Downloads выполнена. Удалено объектов:" & space & (count of mylist) end if end deleteOlderItems
Далее создадим демона, в котором будут указаны параметры:
nano ~/Library/LaunchAgents/custom.delete.files.from.downloads.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>custom.delete.files.from.downloads</string> <key>ProgramArguments</key> <array> <string>osascript</string> <string>/Library/Scripts/Custom/Delete-files-from-downloads.scpt</string> </array> <key>StartCalendarInterval</key> <dict> <key>Hour</key> <integer>10</integer> <key>Minute</key> <integer>0</integer> </dict> </dict> </plist>
Если существует потребность в более гибком расписании, то необходимо добавить в раздел StartCalendarInterval, дополнительные параметры:
Вместо указания даты и времени StartCalendarInterval можно использовать циклические запуски, например раз в сутки.
<key>StartInterval</key> <integer>86400</integer>
Загружаем демон в ОС:
launchctl load -w ~/Library/LaunchAgents/custom.delete.files.from.downloads.plist
Удостовериться в загрузке демона можно так:
launchctl list | grep custom
Во время первого запуска система запросит разрешения на выполнения и доступ в каталог.
Таким образом, задача будет удалять в корзину файлы и каталоги старше 7 дней от имени текущего пользователя каждый день в 10:00. Каждое удаление сопровождается уведомлением.
Проверено на следующих конфигурациях:
Автор первичной редакции: Виталий Якоб Время публикации: 23.03.2022 15:46