shell - 为什么ls | grep *.sh 不会将当前目录下的所有的脚本文件列出来?

查看:147
本文介绍了shell - 为什么ls | grep *.sh 不会将当前目录下的所有的脚本文件列出来?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

结果是什么都不显示,为什么?

解决方案

谢邀请。就我个人看法,你可以参考借鉴:

1.首先你可能对 grep 的理解有点偏差:

grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。

说明:发现没有?grep是查找文件内容,你却用来查找目录下的内容。

2.然而 find 命令才是用来在指定目录下查找文件:

  • 任何位于参数之前的字符串都将被视为欲查找的目录名。

  • 如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。

  • 并且将查找到的子目录和文件全部进行显示。

那么要想在当前目录找到你想要的 .sh 结尾的文件,你可以这样写:

find . -name '*.sh'

3.就是要查目录下的文件,ls 命令没什么卵用,不过不排除其他方法会用到。

ps:仅仅个人看法,有用的话,点个赞咯~~~


后来试了一下你的命令,是可以显示结果,后来发现你的命令是用 grep 来处理 ls 列出的文件列表信息,是可以达到查找目录下的文件,但是这个感觉不用这么别扭吧。要查目录下的文件,有以下几种方式:

find

find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。

find的使用格式如下:

  $ find <指定目录> <指定条件> <指定动作>
   
参数说明:
  - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。
  - <指定条件>: 所要搜索的文件的特征。
  - <指定动作>: 对搜索结果进行特定的处理。

如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。

实例:

  $ find . -name 'my*'

搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。

  $ find . -name 'my*' -ls

搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。

  $ find . -type f -mmin -10

搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。

locate

locate命令其实是"find -name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。

Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。

为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

locate命令的使用实例:

$ locate /etc/sh

搜索etc目录下所有以sh开头的文件。

$ locate ~/m

搜索用户主目录下,所有以m开头的文件。

$ locate -i ~/m

搜索用户主目录下,所有以m开头的文件,并且忽略大小写。

whereis

whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

whereis命令的使用实例:

$ whereis grep

which

which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。

也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

which命令的使用实例:

$ which grep

type

type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。

如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。

type命令的使用实例:

$ type cd

系统会提示,cd是shell的自带命令(build-in)。

$ type grep

系统会提示,grep是一个外部命令,并显示该命令的路径。

$ type -p grep

加上-p参数后,就相当于which命令。


以上都是目录搜索文件的命令,可以参考。

这篇关于shell - 为什么ls | grep *.sh 不会将当前目录下的所有的脚本文件列出来?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆