команда 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 или что-то подобное в отладочном выходе).

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

  • Должен ли я вставлять команду в условное выражение или проверять его код возврата?
  • проверка аргумента для сценария bash - это строка из всех цифр
  • Скопировать / Переместить всю папку, но с определенными расширениями
  • Как вы перемещаете все файлы (включая скрытые) из одного каталога в другой?
  • Как совместить точную строку с помощью `sed`? Но не его часть.
  • Команда scp ведет себя по-разному при использовании с функцией expect
  • Проверьте, существует ли в каталоге несколько файлов
  • Как использовать логический ИЛИ в поиске?
  • tar "--exclude-from" double star wildcard
  • Как найти файлы, заканчивающиеся на ~ и pyc?
  • Как выполнять поиск, замену и добавление шаблона в конец каждой строки
  • Interesting Posts

    Интерактивная сессия оболочки с Java

    Как найти рабочую среду GUI из терминала?

    Как создать ярлык для папки в Документы

    Создание общих initramfs, которые не зависят от ядра

    Применение патча ядра для поддержки режима PIC

    Как получить scapy, чтобы нюхать на правильном интерфейсе?

    Заменить символы Unicode в VIM?

    Ошибка при добавлении пользователя в группу колес в CentOS 7

    Невозможно установить жесткий диск USB. Файловая система не распознана?

    как добавить слово в каждую строку, начинающуюся со слова «kernel»?

    Bumblebee не отключает дискретную графическую карту после закрытия всех программ

    GNU Parallel: как ограничить максимальное количество сетевых заданий на хост

    Помимо Alt + Shift для переключения раскладки клавиатуры, любых других комбинаций клавиш Xorg?

    Рекурсивная очистка всех папок и подпапок в папке, в которой нет файлов

    Выходной параметр при соединении двух матриц?

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