команда find: -или опция не работает

Я хочу выполнить команду для каждого файла, который соответствует шаблону. Но команда, которая кажется правильной, не работает для меня, я понятия не имею, почему.

$ find . -type f -name '*.c' -or -name '*.h' -or -name '*.cpp' -exec ls {} \; $ ls script.sh test.c test.h 

3 Solutions collect form web for “команда find: -или опция не работает”

Попробуйте добавить выражения в круглые скобки, как указано на странице руководства:

 find . -type f \( -name '*.c' -or -name '*.h' -or -name '*.cpp' \) -exec ls {} \; 

должно сработать.

С помощью GNU find вы можете использовать опцию -regex :

 find . -type f -regex '.*\.\(c\|h\|cpp\)' -exec ls {} \; 

Вы можете попробовать использовать find -D tree . [expr..] find -D tree . [expr..] чтобы понять, что находит с вашей исходной командой.

Вы должны понимать, что -type f а также выражения -exec ls .. and остаются в остальных выражениях с более высоким приоритетом, чем or s.
Таким образом, ваша исходная команда будет разбираться в нечто вроде этого: (-type f AND -name *.c) OR -name *.h OR (-name *.cpp AND -exec ls) (обратите внимание, что или фактически является бинарным и не тройной, так a | b | c на самом деле (a | b) | c , но вы получите точку).
Теперь вы заметите, что find не знает, что делать, кроме файлов, соответствующих *.cpp поскольку в других случаях нет допустимого оператора (поэтому вы можете даже увидеть segfault или что-то подобное в отладочном выходе).

Надеюсь, это упростит вам, почему вам нужны круглые скобки.

  • Подстановочные знаки: как я могу перечислить файлы, заканчивающиеся на `.txt`, только без использования символа точки?
  • Заменить слово на основе первых n символов
  • Почему символ дикой карты * настолько отличается между командами zip и rm?
  • Что такое эквивалент шаблона .gitignore регулярного выражения (Big | Small) (State | City) - * \. Csv
  • Как выбрать диапазон файлов с помощью частичного имени
  • Совместите следующий шаблон, который меньше предыдущего совпадения
  • grep -f сбой в файле, отредактированном в Windows
  • Как отлаживать / проверять файл `--exclude-from` для` tar`?
  • Как использовать логический ИЛИ в поиске?
  • Можно ли сопоставить несколько конкретных номеров строк (не диапазон) с sed?
  • Совпадение всех шаблонов из файла сразу
  • Linux и Unix - лучшая ОС в мире.