Я хочу запустить find -name с несколькими типами файлов. Например.
find -name *.h,*.cpp
Возможно ли это?
Я хочу запустить find -name с несколькими типами файлов. Например.
find -name *.h,*.cpp
Возможно ли это?
$ find . -name '*.h' -o -name '*.cpp'
Чтобы найти эту информацию на странице man
, введите man find
и выполните поиск операторов, набрав /OPERATORS
и нажмите enter.
.
не обязательно нужно с GNU find, но необходимо в Unix. Кавычки важны в любом случае, и их исключение вызывает ошибки, если файлы этих типов отображаются в текущем каталоге.
В некоторых системах (таких как Cygwin) круглые скобки необходимы, чтобы сделать набор расширений включительно:
$ find . \( -name '*.h' -o -name '*.cpp' \)
Вот что я использую
find . \( -name "*.h" -o -name "*.cpp" \) -print
find . -name "*.h" -or -name "*.cpp"
работает для меня.
find . -name '*.h' -o -name '*.cc'`
работает для поиска файлов.
find . \( -name '*.h' -o -name '*.cc' \)`
работает для выполнения команд на них
find . \( -name '*.h' -o -name '*.cc' \) -exec egrep "#include" {} \; -print | egrep "^\."
Вы также можете использовать утилиту -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)'
find ./ -name *.csv -o \\-name *.txt|xargs grep -i new