我可以做这个:
$ grep 'text' foo/* foo/**/*
但问题是它扩展以列出所有文件和目录,所以我收到一堆这样的错误:
grep: foo/a: Is a directory
grep: foo/bar/b: Is a directory
grep: foo/bar/c: Is a directory
grep: foo/bar/c/d: Is a directory
我的问题是,是否存在可以用来仅匹配文件的 globstar 模式?
请注意,有些目录可能包含扩展名.
,而有些文件可能没有扩展名,因此**/*.*
不起作用。
此外,这个问题专门针对 ZSH globstar 模式,而不是其他解决方案,例如:
find foo -type f -exec grep -l "text" {} \;
或者
grep -r 'text' foo
答案1
您可以使用**/*(.)
它来仅匹配纯文本文件,或者**/*(-.)
仅匹配纯文本文件和指向纯文本文件的符号链接。
或者如果你放入setopt globstarshort
你的.zshrc
文件中,你可以使用**(.)
和**(-.)
来代替。
文档: