I have a directory with crash logs, and I'd like to use a conditional statement in a bash script based on a find command.
The log files are stored in this format:
/var/log/crashes/app-2012-08-28.log
/var/log/crashes/otherapp-2012-08-28.log
I want the if statement to only return true if there is a crash log for a specific app which has been modified in the last 5 minutes. The find
command that I would use is:
find /var/log/crashes -name app-\*\.log -mmin -5
I'm not sure how to incorporate that into an if
statement properly. I think this might work:
if [ test `find /var/log/crashes -name app-\*\.log -mmin -5` ] then
service myapp restart
fi
There are a few areas where I'm unclear:
- I've looked at the if flags but I'm not sure which one, if any, that I should use.
- Do I need the
test
directive or should I just process against the results of the find command directly, or maybe usefind... | wc -l
to get a line count instead? - Not 100% necessary to answer this question, but
test
is for testing against return codes that commands return? And they are sort of invisible - outside ofstdout
/stderr
? I read theman
page but I'm still pretty unclear about when to usetest
and how to debug it.
find ... -exec
. Also see the example commands under Why is looping over find's output bad practice? – Wildcard Oct 18 '17 at 23:59... -exec command ';' -quit
, but I don't believe there is any solution for the latter other than parsing the result. Also, in either case, the primary problem with parsing the result offind
(i.e. inability to distinguish delimiters from characters in filenames) doesn't apply, as you don't need to find delimiters in these cases. – Jules Feb 01 '18 at 18:12if find ... | grep .
is better: https://unix.stackexchange.com/a/684153/43233 – Noam Manos Dec 28 '21 at 10:29