Даже если /tmp
файл не вызван something
, его поиск с помощью find
вернет 0:
$ find /tmp -name something
$ echo $?
0
Как я могу получить ненулевой статус выхода, когда find
ничего не находит?
Вот строчка, которая, как я считаю, делает то, что вы хотите:
find /tmp -name something | egrep '.*'
Статус возврата будет, 0
когда что-то найдено, и ненулевой в противном случае.
Если вам также нужно захватить вывод find
для дальнейшей обработки, то ответ Свена покрыл это.
*
наegrep
регулярное выражение полностью излишним. Поскольку вы не используетеegrep
синтаксис регулярных выражений, обычный старыйgrep
может быть на несколько микросекунд быстрее.find ... | read
Самое простое решение, которое не печатает, но выходит 0, когда найдены результаты
источник
Выход 0 легко найти, выход> 0 сложнее, потому что обычно это происходит только с ошибкой. Однако мы можем сделать это:
источник
find
видимому, не зависит от кодов выхода, которые-exec
он запускал.exec
разделе, а не под возвращаемым значением). Он не может различить ничего не найденного и не обнаруживает ошибки (например, когда он был вызван на несуществующей начальной точке).После того, как я нашел этот вопрос, пытаясь найти способ решить проблему с Puppet (изменить разрешения для папок в каталоге, но не для самого каталога), похоже, это работает:
Мой конкретный вариант использования такой:
Который выйдет из кода 1, если команда find не найдет файлы с необходимыми разрешениями.
источник
Это невозможно. Функция Find возвращает 0, если она успешно завершается, даже если она не нашла файл (что является правильным результатом, не указывающим на ошибку, когда файл действительно не существует).
Цитировать страницу поиска
В зависимости от того, чего вы хотите достичь, вы можете попытаться найти
-print
имя файла и проверить его вывод:источник
exec
/execdir
(используется с+
):If any invocation returns a non-zero value as exit status, then find returns a non-zero exit status.
Я чувствую, что это самый лаконичный и прямой метод:
источник
-print -quit
, что могло бы решить вашу проблему.Вот маленький сценарий, который я назвал
test.py
. Он улучшает другие методы, опубликованные в том, что он вернет код ошибки, если он установлен, и дополнительно установит один, если find не перечислил никаких файлов:Вот вывод командной строки:
Затем, для результата, где поиск имел ошибки, но нашел файлы:
Затем, если вам нужен список файлов, вы можете использовать
-print 0
переданнуюfind
и разделить переменную out на нули, или вы можете просто добавить для нее оператор печати.источник
Это не только
find
то, что возвращает коды состояния выхода как ноль, когда это успешно. В Unix какую бы команду вы ни выполняли, если она выполнена успешно, она возвращает статус выхода как ноль.источник