Подтвердить что ты не робот

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

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

 find -name *.h,*.cpp

Возможно ли это?

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Ответ 3

find . -name "*.h" -or -name "*.cpp"

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

Ответ 4

find . -name '*.h' -o -name '*.cc'`

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

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

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

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

Ответ 5

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

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

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

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

-E (как флаг ДО путь) позволяет расширенные (современные) регулярные выражения.

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

Ответ 6

Это то, что я использую. Я настоятельно рекомендую аргумент "-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)'

Ответ 7

find ./ -name *.csv -o \\-name *.txt|xargs grep -i new