Mam katalog z dziennikami awarii i chciałbym użyć instrukcji warunkowej w skrypcie bash opartym na poleceniu find.
Pliki dziennika są przechowywane w tym formacie:
/var/log/crashes/app-2012-08-28.log
/var/log/crashes/otherapp-2012-08-28.log
Chcę, aby instrukcja if zwróciła wartość true tylko wtedy, gdy istnieje dziennik awarii dla konkretnej aplikacji, która została zmodyfikowana w ciągu ostatnich 5 minut. find
Poleceń, które używam to:
find /var/log/crashes -name app-\*\.log -mmin -5
Nie jestem pewien, jak if
poprawnie włączyć to do oświadczenia. Myślę, że to może działać:
if [ test `find /var/log/crashes -name app-\*\.log -mmin -5` ] then
service myapp restart
fi
Jest kilka obszarów, w których jestem niejasny:
- Patrzyłem na flagi if, ale nie jestem pewien, który z nich, jeśli w ogóle, powinienem użyć.
- Czy potrzebuję
test
dyrektywy, czy powinienem po prostu przetwarzać bezpośrednio wyniki polecenia find, czy możefind... | wc -l
zamiast tego użyć licznika wierszy? - Nie jest w 100% konieczne, aby odpowiedzieć na to pytanie, ale
test
czy do testowania kodów powrotu komendy return? I są jakby niewidoczne - pozastdout
/stderr
? Czytamman
stronę, ale wciąż nie jestem pewien, kiedy używaćtest
i jak ją debugować.
... -exec command ';' -quit
, ale nie sądzę, że istnieje drugie rozwiązanie poza analizowaniem wyniku. W obu przypadkach główny problem z analizowaniem wyniku find
(tj. Niemożność odróżnienia ograniczników od znaków w nazwach plików) nie ma zastosowania, ponieważ w takich przypadkach nie trzeba znajdować ograniczników.
find ... -exec
. Zobacz także przykładowe polecenia w sekcji Dlaczego zapętlanie wyników wyszukiwania jest złą praktyką?