Вики IT-KB

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

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

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


Боковая панель

apple-mac-os:macos-monterey:automatic-deletion-of-old-files-daemon-as-task-scheduler-in-macos

Автоматическое удаление старых файлов ("Демон" как планировщик задач в macOS)

Ранее уже рассматривался способ автоматизации запуска запланированных задач с помощью действия календаря. В этой заметке мы рассмотрим планировщик в виде пользовательского демона (agents) на примере задачи автоматического удаления файлов старше 7 дней из каталога «Загрузки».

Создадим скрипт AppleScript с именем Delete-files-from-downloads.scpt в расположении /Library/Scripts/Custom

Delete-files-from-downloads.scpt
(*
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

Далее создадим демона, в котором будут указаны параметры:

  1. Путь до скрипта Delete-files-from-downloads.scpt
  2. Параметры запуска
nano ~/Library/LaunchAgents/custom.delete.files.from.downloads.plist
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, дополнительные параметры:

  • Month - Порядковый номер месяца
  • Weekday - Порядковый номер дня недели, при этом 0 и 7 являются воскресением
  • Day - Порядковый номер дня

Вместо указания даты и времени 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. Каждое удаление сопровождается уведомлением.


Проверено на следующих конфигурациях:

Версия ОС
Apple macOS Monterey (12.0)

Автор первичной редакции:
Виталий Якоб
Время публикации: 23.03.2022 15:46

Обсуждение

Ваш комментарий:
 

apple-mac-os/macos-monterey/automatic-deletion-of-old-files-daemon-as-task-scheduler-in-macos.txt · Последнее изменение: 24.03.2022 11:25 — Виталий Якоб