开发者

Unix find: multiple file types

I want to run find -name with multiple file types. Eg.

 find -nam开发者_StackOverflow中文版e *.h,*.cpp

Is this possible?


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

To find this information in the man page, type man find and the search for operators by typing /OPERATORS and hit enter.

The . isn't strictly necessary with GNU find, but is necessary in Unix. The quotes are important in either case, and leaving them out will cause errors if files of those types appear in the current directory.

On some systems (such as Cygwin), parentheses are necessary to make the set of extensions inclusive:

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


Thats what I use

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


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

works for me.


You can also use the -regex utility:

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

Remember that the regex looks at the full absolute path:

For an explanation of that regex with test cases check out: https://regex101.com/r/oY1vL2/1

-E(as a flag BEFORE the path) enables extended (modern) regular expressions.

This is for BSD find (Mac OSX 10.10.5)


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

works for searching files.

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

works for executing commands on them

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


That's what I use.I strongly recommend the "-regextype posix-extended" argument.

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜