Bash 是否可以列出与ls模式匹配的文件?

Bash 是否可以列出与ls模式匹配的文件?,bash,shell,file,sh,ls,Bash,Shell,File,Sh,Ls,我想列出具有ls的目录中的文件,这些文件不使用grep就与模式匹配。可能吗 关键是检索与此模式匹配的所有文件'^\Extra\u text\[0-9]\{10\}.csv' 数一数我得到了多少 我尝试了以下代码: ls | grep'^\Extra_text\[0-9]\{10\}.csv' InputName='|grep^\Extra\u text\[0-9]\{10\}.csv' fileCount=`ls$INPUT\u FILE/$InputName 2>/dev/null | wc-

我想列出具有
ls
的目录中的文件,这些文件不使用
grep
就与模式匹配。可能吗

关键是检索与此模式匹配的所有文件
'^\Extra\u text\[0-9]\{10\}.csv'
数一数我得到了多少

我尝试了以下代码:

ls | grep'^\Extra_text\[0-9]\{10\}.csv'

InputName='|grep^\Extra\u text\[0-9]\{10\}.csv'

fileCount=`ls$INPUT\u FILE/$InputName 2>/dev/null | wc-l`

echo“$fileCount


但是它不起作用!:/

仅与
ls
不兼容。
ls
根本不了解模式。它只能与shell提供的全局绑定(通配符
*
或扩展全局绑定-请参阅Bash手册页面中的
extglob
)一起使用,但不能与正则表达式一起使用

一种简单的方法是为此作业使用
find
(注意正则表达式需要匹配整个文件名):


查找
手册页面中查找
-regex
,了解更多信息。

ls
首先不应该被编程使用;它的构建只是为了生成供人使用的输出——请参见……这就是为什么不能使用管道组件(或其他shell语法)从变量来看,这在中有深入的介绍。你不能使用shell文件名globbing吗?作为对比,
files=(额外文本[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]。csv);echo“找到${“
完全不需要外部工具。@BrianAgnew,请不要链接ABS。从它的例子中学到坏习惯的人几乎比其他任何地方都多。如果在GNU平台上,
可能会找到-printf'\n'| wc-l
,从输出中删除名称本身,因此即使使用的“查找”版本在默认打印操作中没有进行任何转义,也不能对其中包含新行的文件名进行多次计数。@charlesduff谢谢。有趣的是,
-printf'.| wc-c
似乎更快:(顺便说一句,我甚至不会说
ls
理解shell模式;是shell在
ls
开始之前进行扩展)。
find . -regex '<yourpattern>'
# safe for corner case: version of find w/o newline escaping and files with newlines:
find . -regex '<yourpattern>' -printf '.' | wc -c    

# fallback for non-GNU platform, corner cases not addressed:
find . -regex '<yourpattern>' | wc -l