使用ls查找扩展名为ls的文件



我需要在目录中只查找具有ls扩展名的文件(不能使用find)。

我试过ls *。*,但如果dir不包含任何扩展名的文件,则返回"No such file or directory"。

我不想要这个错误,并希望ls返回到cmd提示符,如果有扩展名的文件。

我已经尝试使用grep和ls来达到相同的效果。

ls | grep"*。*"-不工作但是ls | grep "."可以。

我不知道为什么grep *。*不起作用。任何帮助都是感激的!

谢谢!

我认为正确的解决方案是:

( shopt -s nullglob ; echo *.* )

这有点冗长,但无论你有什么样的时髦文件名,它总是可以工作的。(lsgrep管道的问题是,典型的系统允许在文件名中使用非常奇怪的字符,包括,例如,换行符。)

shopt -s nullglob部分启用("sets") nullglob shell opt选项,它告诉Bash如果没有文件名匹配*.*,那么*.*应该被删除(即应该展开成什么)而不是单独留下。

括号(...)用于设置子shell,因此nullglob选项仅为脚本的这一小部分启用。

Try

ls -1 | grep "."

只列出含有extensión的文件,如果没有你需要的文件,则不列出任何(空列表)。

使用Linux grep,您可以添加-v来获得没有扩展名的列表文件。

理解shell模式和正则表达式之间的区别非常重要。Shell模式稍微简单一些,但灵活性较差。Grep使用正则表达式进行匹配。像

这样的shell模式
*.*

将用正则表达式

完成
.*..*

,但是grep中的正则表达式没有锚定,这意味着它在行中的任何地方搜索匹配,使得两个.*部分变得不必要。

最新更新