Чтобы отправить электронное письмо на foo@bar.com
, если файл содержит присвоение чего-либо, отличного от -нуля, чему-либо:
grep '='
(или `grep 'count=', если вам нужна более конкретная информация ). grep -v -w '0'
(-w
для сопоставления только полных слов, то есть не 10
в данном случае ). if grep '=' output.txt | grep -q -v -w '0'; then
grep '=' output.txt | grep -v -w '0' | mailx -s "Check this out!" foo@bar.com
fi
Для данных в вопросе будет отправлено электронное письмо, содержащее
GHI_count= 56
Если вам кажется ненужным запускать четыре grep для этого:
tmpfile=$(mktemp)
grep '=' output.txt | grep -v -w '0' >"$tmpfile"
if [ -s "$tmpfile" ]; then
mailx -s "Check this out!" foo@bar.com <"$tmpfile"
fi
rm -f "$tmpfile"
Тест -s
будет верным, если файл существует и его размер больше нуля.
Возможно, вам потребуется предоставить более подробную информацию о фактическом варианте использования. Я предполагаю, что у вас ежедневно выполняется сценарий очистки, и вы хотите удалить все файлы старше, скажем, 5 дней (, то есть 6 дней назад или ранее ).
В этих обстоятельствах вы можете объединить операцию условного поиска и удаления файлов в одну команду, используя здесь find
(, предполагая GNU find
или совместимость ), как в
find /start/of/logfile/dir/structure ! -type d -daystart -mtime +5 -delete
, который при запуске в 2019 -11 -16 22 :54 :12 по местному времени удалит не -файлы каталога, время последнего изменения которых до 2019 -11 -11 00 :00 :00 (значит файлы от 10-го и старше ).
Обратите внимание, что опция -daystart
этой команды find
должна обеспечивать желаемое поведение. Если вам нужно ограничить операцию определенными частями имени файла, вам придется добавить-name <pattern>
(cf. документация к GNUfind
).
Также обратите внимание, что в зависимости от версии find
, установленной на вашем компьютере, операция -delete
может быть недоступна , поэтому вам, возможно, придется использовать вместо нее -exec rm {} \;
.
man find
, -время:
...so to match -atime +1, a file has to have been accessed at least two days ago.
Опция -daystart
изменяет интерпретацию:
-daystart
Measure times (for -amin, -atime, -cmin, -ctime, -mmin, and -mtime)
from the beginning of today rather than from 24 hours ago.
touch -d '2019-11-19 0800' thismorning
позволяет легко создавать тестовые файлы:
]# find -name '*n*g*' -daystart -mtime 0 -ls
Nov 19 08:00./thismorning
]# find -name '*n*g*' -daystart -mtime 1 -ls
Nov 18 22:30./lastnight
Nov 18 08:30./lastmorning
]# find -name '*n*g*' -mtime 0 -ls
Nov 18 22:30./lastnight
Nov 19 08:00./thismorning
]# find -name '*n*g*' -mtime 1 -ls
Nov 17 22:00./lastlastnight
Nov 18 08:30./lastmorning
(Я вырезал -поля вывода ls --оставил только даты и имена файлов)
]# find -name '*n*g*'; date
./lastnight
./thismorning
./lastlastnight
./lastmorning
Tue Nov 19 10:34:33 UTC 2019
]# find -name '*n*g*' -daystart -mtime 2 -ls
Nov 17 22:00./lastlastnight
]#
...потому что вы перепутали календарные дни и 24-часовые -периоды в своем ОП. Иногда мы хотим этого, иногда этого.
Почему секунды с начала эпохи?
Если вы хотите узнать, как долго что-то длилось, т. е. разницу двух дат, в нашем календаре есть эти нарушения (месяцев ). Так что либо используйте костяшки пальцев, знайте об императорах Юлии и Августе, либо применяйте грубую силу за секунды.
От 30.7. до 1,9. на три дня больше, чем 30.1. до 1.3., и это даже зависит от високосных лет.
today, 5:30 pm
и tomorrow 6:00 am
являются
Из даты истечения срока _я вычитаю, что вы хотите подсчитать прошедшие 24-часовые периоды. Это означает, что в 1 :00 большая часть «вчера» не затрагивается.
Я проверил и исправил команду date
]# date -d "-1 day" +%s
1574003538
]# date -d "-0 day" +%s
1574089945
Разница 86407 т.е. 24x60x60.
(И если кто-нибудь спросит меня :"Что ты делал в date -d @1574089945
?" Я могу сказать :"Я редактировал команду семь секунд ")
]# find. -atime 1
./here.sh
]# find. -atime +0 -atime -2
./here.sh
]# ls -l here.sh
-rw-r--r-- 1 root root 154 Nov 16 21:37 here.sh
Сейчас Nov 18 16:43
. Таким образом, между ними есть один полный 24-часовой период.