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. findPoleceń, które używam to:
find /var/log/crashes -name app-\*\.log -mmin -5
Nie jestem pewien, jak ifpoprawnie 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ę
testdyrektywy, czy powinienem po prostu przetwarzać bezpośrednio wyniki polecenia find, czy możefind... | wc -lzamiast tego użyć licznika wierszy? - Nie jest w 100% konieczne, aby odpowiedzieć na to pytanie, ale
testczy do testowania kodów powrotu komendy return? I są jakby niewidoczne - pozastdout/stderr? Czytammanstronę, ale wciąż nie jestem pewien, kiedy używaćtesti 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ą?