Applescript получить последнюю открытую дату файла - PullRequest
1 голос
/ 27 августа 2011

Я могу использовать
set modDate to the modification date of theFile as string, чтобы получить дату последнего изменения файла, и
set modDate to the creation date of theFile as string, чтобы получить дату, когда файл был создан.

Есть ли что-то вроде last opened date чтобы получить дату последнего открытия файла?

Ответы [ 3 ]

2 голосов
/ 27 августа 2011

Да. Существует команда UNIX с именем kMDItemLastUsedDate, которая возвращает дату последнего использования целевого элемента.

set the Last_opened_date to (do shell script "mdls -name kMDItemLastUsedDate " & quoted form of the POSIX path of theFile)

Однако эта команда не возвращает объект с литеральной датой. Вместо этого он возвращает объект даты в формате ISO 8601: 2004 (ГГГГ-ММ-ДД ЧЧ: ММ: СС), который, если вы попытаетесь поставить date перед ним, вы получите синтаксическую ошибку.

Вот пересмотренный скрипт:

property months : {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}

set the Last_opened_date to date convert_date(do shell script "mdls -name kMDItemLastUsedDate " & quoted form of the POSIX path of theFile)

on convert_date(passed_data)
    set prevTIDs to AppleScript's text item delimiters
    set AppleScript's text item delimiters to space
    set the ISO_date to the first text item of (passed_data as string)
    set AppleScript's text item delimiters to "-"
    set the date_parts to every text item of the ISO_date
    set the_year to the first text item of the date_parts
    set the_month to the second text item of the date_parts
    set the_day to the third text item of the date_parts
    set AppleScript's text item delimiters to space
    set the time_string to the second text item of (passed_data as string)
    set AppleScript's text item delimiters to prevTIDs
    return item (the_month as integer) of months & the_day & ", " & the_year & space & the time_string
end convert_date
1 голос
/ 26 февраля 2012

У меня была проблема с желанием получить дату, которая была доступна только в метаданных прожектора (дата создания содержимого файла изображения "kMDItemContentCreationDate" - я думаю, что это оригинальная дата с камеры).так что я придумал это;примечание: я использовал «копировать» и «рассказать» для моей собственной ясности / ОКД.есть принуждение «по дате» для «do shell script», но оно просто дало мне разные ошибки.есть также более простые и лучшие «awk», чтобы делать больше / лучше, но «- name» дает только одно значение mdls, которое вы запрашиваете.

(* получает значение mdls «metaDate», т.е.одна из многих доступных дат метаданных «qpImg» - это «указанная форма пути posix» некоторого файла, который awk сокращает до фактической строки даты / времени *)

tell current application to copy (do shell script ("mdls " & " -name " & metaDate & " " & qpImg & " | awk -F ' ' '/Date/ {print $3,$4};'")) to targDate

(* принимает mdlsИнформация указывается в форме "2012-01-19 14:37:38 -500" и делает ее яблочной подписью. "inText" - это путь posix, который на лету преобразуется в его "цитируемую форму". "% x% r"является «стандартной числовой» датой и 12-часовым временем и может быть приведен через «как дата» *)

tell current application to set formtdDate to do shell script "date -j -f '%Y-%m-%d %H:%M:%S' " & quoted form of inText & " +'%x %r'"

- оба могут быть объединены с использованием xargs

tell current application to copy (do shell script ("mdls -name " & metaDate & " " & qpImg & " | awk -F ' ' '{print $3,$4};' | xargs -0 -I indate date -j -f '%Y-%m-%d %H:%M:%S' indate +'%x %r'")) to targDate
0 голосов
/ 27 августа 2011

Не существует чистого решения AppleScript для получения даты последнего доступа к файлу.Используя комбинацию инструментов оболочки stat и date , вы можете создать вспомогательную функцию AppleScript, которая обеспечивает дату последнего открытия:

on LastOpenedDate(theFile)
    set theStr to do shell script "date -r $(stat -f %a " & quoted form of (POSIX path of theFile) & ") +%Y-%m-%dT%H:%M:%S"
    ISODateStrToDate(theStr)
end LastOpenedDate

Функция использует следующеевспомогательная функция для преобразования последней открытой метки времени, которая возвращается в виде строки в формате ISO 8601 в дату AppleScript:

on ISODateStrToDate(theStr)
    set dt to (current date)
    set savedDelimeters to AppleScript's text item delimiters
    set AppleScript's text item delimiters to {"-", "T", ":"}
    set {dt's year, dt's month, dt's day, dt's hours, dt's minutes, dt's seconds} to (every text item of theStr)
    set AppleScript's text item delimiters to savedDelimeters
    return dt
end ISODateStrToDate

Функция LastOpenedDate может быть вызвана с помощью alias, file или POSIX file в качестве аргумента, например:

LastOpenedDate(POSIX file "/var/log/system.log")

возвращает

date "Saturday, August 27, 2011 4:04:52 PM"

на моем компьютере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...