Как я могу найти соответствующие файлы и выйти с ненулевым кодом, если они найдены?
Передайте результат в grep ''
. Инструмент не будет изменять текстовый поток, но он будет генерировать состояние выхода 0
или в 1
зависимости от того, проходит ли через него какая-либо строка или нет.
Я знаю, ты хочешь это по-другому. Если бы я был тобой, я бы приспособился к поведению, grep
хотя. Мое обоснование таково: вы хотите знать файлы, которые соответствуют вашим критериям; команда находит их, поэтому ей удается найти хотя бы один файл.
Однако, если вы настаиваете на противоположном поведении, просто отмените статус выхода . Пример:
! find . -name "*.xyz" -exec sh -c 'grep -L "$(basename "$1")" "$1"' sh {} \; | grep ''
Заметьте, я отладил ваш sh
вызов внутри find
. Ваш оригинальный подход имел бы обратный эффект, если его {}
расширить до ./a;rm -rf ~;.xyz
(это допустимое имя файла во многих файловых системах Linux).