Найти и регулярное выражение

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

; touch ook ooks ; find . -name 'ook' -or -name 'ooks' -type f ./ook ./ooks ; find . -name 'ook[s]?' -type f [returns nothing] ; echo $? 0 

  • Найти каталог, если количество файлов превышает X
  • пользовательский разделитель для поиска unix
  • У кучи файлов есть 777 разрешений
  • как заменить выражение sed (изменить и распечатать только согласованную строку) с выражением perl?
  • sed или tr однострочный, чтобы удалить все числовые цифры
  • Поиск всех «не двоичных» файлов
  • удалить ведущую строку в bash
  • Как я могу grep результаты FIND с использованием -EXEC и все еще выводятся в файл?
  • Почему `find -name * .jks` не возвращает некоторые файлы?
  • Простое регулярное выражение Bash соответствует отсутствующему символу (OS X)
  • найти и найти: использование, плюсы и минусы друг друга
  • sed или tr однострочный, чтобы удалить все числовые цифры
  • 2 Solutions collect form web for “Найти и регулярное выражение”

    Вы смешиваете регулярные выражения с шаблонами поиска оболочки.

    ? в оболочке означает любой отдельный символ.

    ? в regexp означает, что предыдущий символ (или подзапись) является необязательным.

    Пытаться:

    find . -regex '.*ooks?' -type f

    На странице поиска:

            -regex pattern
                   Имя файла соответствует шаблону регулярного выражения.  Это совпадение
                   на весь путь, а не на поиск.  Например, чтобы сопоставить файл
                   с именем `./fubar3 ', вы можете использовать регулярное выражение`. * bar.'  или
                   `. * b. * 3 ', но не` f. * r3'.  Регулярные выражения понятны
                   по поискам по умолчанию Emacs Regular Expressions, но это может
                   изменить с помощью параметра -regextype.
    

    Этот ответ применяется, по крайней мере, к GNU find.

    -name совпадает с использованием шаблонов оболочки, если вы хотите выполнить сопоставление регулярных выражений, вместо этого используйте -regex :

      find . -regex '.*ook[s]?' -type f 

    -regex соответствует всему пути с использованием emacs regex. Тип регулярного выражения можно изменить с помощью параметра -regextype .

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