使用ls查找只有扩展名的文件

时间:2013-04-08 03:50:01

标签: linux bash ls

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

我试过ls *。*,但是如果dir不包含任何带扩展名的文件,则会返回“没有这样的文件或目录”。

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

我试图用ls来实现同样的目标。

ls | grep“*。*” - 不起作用 但是ls | grep“\。”的工作原理。

我不知道为什么grep *。*不起作用。任何帮助表示赞赏!

谢谢!

3 个答案:

答案 0 :(得分:2)

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

( shopt -s nullglob ; echo *.* )

它有点冗长,但无论你有什么样的时髦文件名,它都会一直有效。 (管道lsgrep的问题在于,典型系统允许文件名中存在奇怪的字符,例如换行符。)

shopt -s nullglob部分启用(“ s ets”)nullglob sh ell opt 选项,告诉Bash,如果没有文件的名称与*.*匹配,那么*.*应该被删除(即,应该扩展为空),而不是单独留下。

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

答案 1 :(得分:1)

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

这样的shell模式
*.*

将使用正则表达式

完成
.*\..*

但grep中的正则表达式没有锚定,这意味着它会在该行的任何位置搜索匹配项,从而无需使用两个.*部分。

答案 2 :(得分:1)

尝试

ls -1 | grep "\."
如果没有文件,

仅列出带有extensión和无文件的文件(空列表):就像你需要的那样。

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