开发者

bash find prints file twice when used expression

开发者 https://www.devze.com 2023-03-15 00:38 出处:网络
Why are the files printed twice? find . *.{h,cc} -maxdepth 1 -type f ./file7.h ./file8.h ./file9.cc file7.h

Why are the files printed twice?

find . *.{h,cc} -maxdepth 1 -type f
./file7.h
./file8.h
./file9.cc
file7.h
file8.h
file9.cc

Is this correct? How do I spe开发者_开发技巧cify file patterns?


It's there twice because it's finding it first under ., and then under the actual filename as given to find as a place to search. Perhaps you meant to use -name while escaping the wildcards.


find . -maxdepth 1 \( -name \*.h -o -name \*.cc \) -type f


If you're merely looking for files in the current directory, why not simply use:

 $ shopt -s expglob
 $ ls *.*(h|cc) */*.*(h|cc)

Otherwise, you have to do something liek this:

 $ find . -maxdepth 1 -type f \( -name "*.h" -o -name "*.cc" \)

Using parentheses will do the or first, then combine it with the -type f and -maxdepth.


find *.{h,cpp} -maxdepth 1 -type f
This maybe help .


find . -name *.h -o -name *.cc -maxdepth 1 -type f
0

精彩评论

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