В Unix найти: несколько типов файлов


Я хочу запустить find-name с несколькими типами файлов. Например.

 find -name *.h,*.cpp

это возможно?

6 51

6 ответов:

$ find . -name '*.h' -o -name '*.cpp'

найти эту информацию в man страница, типа man find и поиск операторов, набрав /OPERATORS и нажмите enter.

The . не является строго необходимым с GNU find, но необходим в Unix. Кавычки важны в любом случае, и их исключение приведет к ошибкам, если файлы этих типов появятся в текущем каталоге.

в некоторых системах (таких как Cygwin), скобки необходимы, чтобы сделать набор расширений включительно:

$ find . \( -name '*.h' -o -name '*.cpp' \)

вот что я использую

find . \( -name "*.h" -o -name "*.cpp" \) -print
find . -name '*.h' -o -name '*.cc'`

работы для поиска файлов.

find . \( -name '*.h' -o -name '*.cc' \)`

работы для выполнения команд на них

find . \( -name '*.h' -o -name '*.cc' \) -exec egrep "#include" {} \; -print | egrep "^\."
find . -name "*.h" -or -name "*.cpp"

работает для меня.

вы также можете использовать -regex утилиты:

find -E . -iregex ".*\.(js|jsx|html|htm)"

помните, что регулярное выражение смотрит на полный абсолютный путь:

для объяснения этого регулярного выражения с тестовыми случаями проверьте:https://regex101.com/r/oY1vL2/1

-E(как флаг перед путем) включает расширенные (современные) регулярные выражения.

это для BSD find (Mac OSX 10.10.5)

вот что я использую.Я настоятельно рекомендую аргумент "- regextype posix-extended".

find . -type f -iname "*.log" -o -iname "*.gz" 
find . -type f \( -name "*.gz" -o -name "*.log" \)
find . -type f -regex '.*\(\.gz\|\.log\)'
find . -type f -regextype posix-extended -regex '.*.(log|gz)'