-not -name не работает с поиском

Я пытаюсь использовать find / grep, чтобы найти некоторые текстовые шаблоны в моей базе кода. Я хочу исключить не исходные каталоги, в которые мой процесс сборки дублирует исходные файлы:

find . -name *.java -not -name *target* -exec grep -l 'someText' {} \; 2>/dev/null 

К сожалению, я все еще получаю целевые каталоги в результате, например:

 ./toplevel/src/com/domain/toplevel/module/SourceFile.java 

Что я делаю неправильно и как это исправить?

  • locate не находит файл, присутствующий в текущем каталоге
  • `find -path` объяснил
  • Копирование файлов, содержащих определенную структуру сохранения текста
  • Скрипт оболочки, find -name и расширение подстановочного знака
  • Как запустить find -exec?
  • Поиск файлов, которые пользователь не может прочитать?
  • Каков наилучший способ удалить автоматически созданные файлы из папки, зная, что папка может содержать файлы, созданные вручную, чтобы их не удалять?
  • Каковы проблемы безопасности и условия гонки при использовании `find -exec`?
  • One Solution collect form web for “-not -name не работает с поиском”

    -name pattern совпадает с именем файла. SourceFile.java не соответствует *pattern* , поэтому он включен. Если вы не хотите спускаться в каталоги, чье имя содержит target , тогда вам понадобится:

     find . -name '*target*' -prune -o -name '*.java' \ -exec grep -sl 'someText' {} + 

    (не забудьте указать шаблоны, иначе они могут быть расширены оболочкой).

    Для нескольких шаблонов:

     find . \( -name 'pattern1' -o -name 'pattern2' \) -prune \ -o -name '*.java' -exec grep -sl 'someText' {} + 

    (AND ( -a ) подразумевается, если не указано между двумя предикатами. AND имеет приоритет над OR ( -o ), следовательно, скобки выше).

    Обратите внимание, что ! является переносным / стандартным эквивалентом -not .

    Если вы хотите совпадения по полному пути, вам нужно использовать -path вместо:

     find . -name '*.java' ! -path '*target*' -exec grep -sl someText {} + 

    Но это не останавливает find от нисходящих в *target* каталогов, что немного отходы, так как find не будет сообщать о каком-либо файле там.

    Interesting Posts

    Удалить файлы из tar-архива

    Есть два способа установить awk vars через командную строку?

    Как создать пусковую установку для отображения последних файлов

    Удалите повторяющиеся строки, сохраняя порядок строк

    Дайте группе право отправлять сигналы убийства

    Вывод `java -version` не соответствует grep или awk

    Запуск системного модуля systemd при следующей загрузке, но не последующие загрузки

    Почему мой Netstat не возвращает желаемый результат и просто повесил трубку?

    Что означает \ l в / etc / issue?

    Перезапустить Openbox с другим профилем, возможно ли это?

    Ошибка ввода / вывода с использованием jmtpfs, не сохраняющего файл при копировании на устройство

    Есть ли альтернатива эхо-демон для отображения ip?

    Как разрешить дубликаты пакетов из-за прерванного обновления yum

    Создайте конфигурационный файл устройства ввода xorg только для определенного устройства

    Как я могу обнаружить оболочку без входа? (В Zsh)

    Linux и Unix - лучшая ОС в мире.