结果是什么都不显示,为什么?
你这样过滤写的有问题。 * 代表你过滤通配符查询所有文件以.sh 结尾的。
ls | grep *.sh
你的ls | grep .*sh 这样写没法判断。
还有一种方法也可以帮你查询所有目录下面的sh,ls只能查询当前目录下面的,如果需要查询其他目录,需要添加绝对路径。
find / -name *.sh
这样查询应该会得到你所以.sh
有很多种做法,但显然要理解正则表达式。在正则表达式里,.表示任意字符,*表示匹配0个或多个字符,*必须放在.后面,表示匹配任意多个任意字符,而不能反过来把.放在*后面。
所以这个命令可以写成
ls | grep sh
也行,但如果文件名中包含了sh,也会被筛出来,所以需要在sh前加.,但这个.需要转义,所以需要加\,比如:
ls | grep \.sh
但如果文件后缀是.sh.zip,也会被选出来,所以可以加$以表示文件名的结尾,在这里$需要被转义,所以最后格式是:
ls | grep \.sh\$
谢邀请。就我个人看法,你可以参考借鉴:
1.首先你可能对 grep 的理解有点偏差:
grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。
说明:发现没有?grep是查找文件内容,你却用来查找目录下的内容。
2.然而 find 命令才是用来在指定目录下查找文件:
任何位于参数之前的字符串都将被视为欲查找的目录名。
如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。
并且将查找到的子目录和文件全部进行显示。
那么要想在当前目录找到你想要的 .sh 结尾的文件,你可以这样写:
3.就是要查目录下的文件,ls 命令没什么卵用,不过不排除其他方法会用到。
ps:仅仅个人看法,有用的话,点个赞咯~~~
后来试了一下你的命令,是可以显示结果,后来发现你的命令是用 grep 来处理 ls 列出的文件列表信息,是可以达到查找目录下的文件,但是这个感觉不用这么别扭吧。要查目录下的文件,有以下几种方式:
find
find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。
find的使用格式如下:
如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。
实例:
搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。
搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。
搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。
locate
locate命令其实是"find -name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。
Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。
为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
locate命令的使用实例:
搜索etc目录下所有以sh开头的文件。
搜索用户主目录下,所有以m开头的文件。
搜索用户主目录下,所有以m开头的文件,并且忽略大小写。
whereis
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
whereis命令的使用实例:
which
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
which命令的使用实例:
type
type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。
如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
type命令的使用实例:
系统会提示,cd是shell的自带命令(build-in)。
系统会提示,grep是一个外部命令,并显示该命令的路径。
加上-p参数后,就相当于which命令。
以上都是目录搜索文件的命令,可以参考。