ZSH 和 globstar 匹配子目录中的所有文件,但不匹配目录

ZSH 和 globstar 匹配子目录中的所有文件,但不匹配目录

我可以做这个:

$ 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文件中,你可以使用**(.)**(-.)来代替。

文档:

相关内容