我只需要在目录中找到具有使用ls的扩展名的文件(不能使用find)。只使用ls找到带扩展名的文件
我试过ls *。*,但是如果dir不包含任何扩展名的文件,它会返回“没有这样的文件或目录”。
我不想要那个错误,并且想让ls返回到cmd提示符,如果有扩展名的文件。
我试图使用gre与ls来实现相同。
ls | grep“*。*” - 不起作用 但是ls | grep“\”。作品。
我不知道为什么grep *。*不起作用。任何帮助表示赞赏!
谢谢!
我只需要在目录中找到具有使用ls的扩展名的文件(不能使用find)。只使用ls找到带扩展名的文件
我试过ls *。*,但是如果dir不包含任何扩展名的文件,它会返回“没有这样的文件或目录”。
我不想要那个错误,并且想让ls返回到cmd提示符,如果有扩展名的文件。
我试图使用gre与ls来实现相同。
ls | grep“*。*” - 不起作用 但是ls | grep“\”。作品。
我不知道为什么grep *。*不起作用。任何帮助表示赞赏!
谢谢!
理解shell模式和正则表达式之间的区别很重要。壳模式有点简单,但不够灵活。 grep使用正则表达式匹配。像
*.*
甲壳图案将与正则表达式来完成作为
.*\..*
但在grep的正则表达式不固定的,这意味着它搜索的匹配就行的任何地方,使两个.*
部件不必要。
我认为正确的解决办法是这样的:
(shopt -s nullglob ; echo *.*)
这是一个有点冗长,但它永远是可行的,不管你有什么样时髦的文件名。 (带管道ls
到grep
的问题是,典型的系统允许在文件名中确实离奇字符,包括,例如,换行。)
的shopt -s nullglob
部分启用(“小号 ETS”)的nullglob
SH ELL 选择选项,它告诉Bash如果没有文件的名称匹配*.*
,那么*.*
应该被删除(即应该扩展为无),而不是单独放置。
圆括号(...)
要设置子shell,所以nullglob
选项仅对脚本的这一小部分启用。
尝试
ls -1 | grep "\."
名单只有具有扩展和无(空单)文件,如果没有文件:喜欢你的需要。
使用Linux grep,您可以添加-v来获取不带扩展名的列表文件。
'ls | grep'\。'' – 2013-04-08 03:51:45
是的,正如上面提到的那样。你能解释它为什么会这样做,为什么\ *。\ *不会? – 2013-04-08 03:53:16
'ls *。{mp3,exe,mp4}' 这个问题应该有所帮助:http:// stackoverflow。com/questions/1447625/list-files-with-certain-extensions-with-ls-and-grep – 2013-04-08 03:53:52