Это было бы
if [ -n "$(find /var/log/crashes -name app-\*\.log -mmin -5)" ]; then
или
if test -n "$(find /var/log/crashes -name app-\*\.log -mmin -5)"; then
Команды test
и [ … ]
точно синонимичны. Единственной разницей является их имя и факт это [
требует закрытия ]
как его последний аргумент. Как всегда, используйте двойные кавычки вокруг замены команды, иначе вывод find
команда будет повреждена в слова, и здесь Вы получите синтаксическую ошибку, если будет больше чем один файл соответствия (и когда нет никаких аргументов, [ -n ]
верно, тогда как Вы хотите [ -n "" ]
который является ложью).
В ksh, ударе и zsh, но не в пепле, можно также использовать [[ … ]]
который имеет различные правила парсинга: [
обычная команда, тогда как [[ … ]]
другая конструкция парсинга. Вам не нужны двойные кавычки внутри [[ … ]]
(хотя они не причиняют боль). Вам все еще нужно ;
после команды.
if [[ -n $(find /var/log/crashes -name app-\*\.log -mmin -5) ]]; then
Это может потенциально быть неэффективно: если существует много файлов в /var/log/crashes
, находка исследует их всех. Необходимо сделать, находят остановку, как только она находит соответствие, или вскоре после. С GNU находят (не встроил Linux, Cygwin), используйте -quit
основной.
if [ -n "$(find /var/log/crashes -name app-\*\.log -mmin -5 -print -quit)" ]; then
С другими системами, каналом find
в head
по крайней мере, выходить вскоре после первого соответствия (находка умрет от поврежденного канала).
if [ -n "$(find /var/log/crashes -name app-\*\.log -mmin -5 -print | head -n 1)" ]; then
(Можно использовать head -c 1
если Ваш head
управляйте поддерживает его.)
С другой стороны, используйте zsh.
crash_files=(/var/log/crashes/**/app-*.log(mm-5[1]))
if (($#crash_files)); then
Можно скрыть те файлы с помощью директивы HideFiles. Затем необходимо рассматривать те файлы, как будто они не существуют, с помощью директивы IgnoreHidden.