#bash #macos
#bash #macos
Вопрос:
Я пытаюсь написать скрипт, который сообщает мне, когда в последний раз открывалось конкретное приложение (на Mac OSX), а затем посмотреть, прошло ли оно дольше 1 месяца.
Я могу узнать, как давно, используя «mdls» на Mac. И тогда я могу найти дату, которая была 1 месяц назад, но теперь я немного застрял в том, как написать оператор IF.
#!/bin/sh
outlook_last_opened=`mdls "/Applications/Microsoft Office 2011/Microsoft Outlook.app/Contents/MacOS/Microsoft Outlook" -name kMDItemLastUsedDate | awk '{print $3}'`
last_month_day=`date -v -1m ' %Y-%m-%d'` # Sets the date to 1 month ago
if [[ {???} ]]; then # Not sure about this
echo "Older than 1 month"
else
echo "Less than 1 month"
fi
Комментарии:
1. Можете ли вы также предоставить формат
outlook_last_opened
, чтобы те из нас, кто работает в Linux, также могли попытаться помочь?
Ответ №1:
Рассмотрим эту функцию bash, которая преобразует дату ГГГГ-ММ-ДД во временную метку начиная с эпохи (она сохранит текущее время суток):
date_to_timestamp() { date -j -f '%Y-%m-%d' "$1" ' %s'; }
Затем вы можете преобразовать свои 2 значения и сравнить их:
if [ $(date_to_timestamp $outlook_last_opened) -lt $(date_to_timestamp $last_month_day) ]; then
echo "Older than 1 month"
else
echo "Less than 1 month"
fi
Комментарии:
1. Спасибо! Это было идеально.
Ответ №2:
Может быть, вы могли бы…
[[ $(( $(date -d"$outlook_last_opened" %s) - $(date -d"$last_month_day" %s) )) -gt 0 ]]
Но я не знаю… Я использую GNU / Linux, а не OSX
Комментарии:
1. рассмотрите возможность выполнения прямого
A -gt B
вместоA - B -gt 0