我本可以发誓你可以做以下事情:
ls *.{java, cpp}
但这似乎不起作用。我知道这个答案可能在网站的某处,但我无法通过搜索找到它。
例如,如果我希望能够使用find命令使用globbing,我会想做类似的事情
find . -name "*.{java,cpp}" | xargs grep -n 'TODO'
这是否可以不使用-o二元运算符?
答案 0 :(得分:3)
您可能会看到如下错误消息:
ls:无法访问*。{java:没有这样的文件或目录
ls:无法访问,cpp}:没有这样的文件或目录
如果是这种情况,那是因为逗号之后的空格。把它拿出来:
ls *.{java,cpp}
为了将来参考,发布错误消息比说“它不起作用”更有帮助(请不要亲自接受。这对每个人来说都是有意义的。我甚至会这样做有时太经常了。)
答案 1 :(得分:1)
ls *.{java,cpp}
在bash中对我很好......:
$ ls *.{java,cpp}
a.cpp ope.cpp sc.cpp weso.cpp
helo.java qtt.cpp srcs.cpp
你确定它不适合你......?
find
不同,但
find -E . -regex '.*\.(java|cpp)'
应该做你想做的事情(在某些版本中你可能不需要-E
,或者你可能需要-regextype
选项,在你的特定系统上找到“man find”以找出答案。 / p>
答案 2 :(得分:0)
但是这个 在Bash中工作:
$ ls a.h a.s main.cpp main.s $ ls *.{cpp,h} a.h main.cpp
你确定你在Bash吗?如果您是,可能是别名导致此问题:请尝试/bin/ls *.{java,cpp}
以确保您不会调用别名ls
。
或者,只需取出{}
内列表中的空格 - 空格将导致错误,因为Bash会将*.{java,
视为ls
的一个参数1}},它会将cpp}
视为第二个参数。
答案 3 :(得分:0)
对于您的特定示例,这也可能会执行您想要的操作
grep -rn TODO . --include '*.java' --include '*.cpp'