如何从Linux ls中查找文件列表中的内容或查找命令

时间:2015-12-15 23:03:56

标签: linux grep ls

我正在投放 - > “find。-name'* .txt'”命令并获取文件列表。

我得到以下输出:

./bsd/contrib/amd/ldap-id.txt
./bsd/contrib/expat/tests/benchmark/README.txt
./bsd/contrib/expat/tests/README.txt
./bsd/lib/libc/softfloat/README.txt

等等,

在这些文件中,如何运行grep命令并读取内容并仅过滤那些具有特定关键字的文件?例如其中的“版本”。

3 个答案:

答案 0 :(得分:4)

xargs是实现这一目标的好方法,已经涵盖了它。

-exec的{​​{1}}选项对此也很有用。它将对从find返回的所有文件执行命令。

尽可能少地调用find,为每次调用传递多个文件名:

grep

或者,为每个找到的文件调用find . -name '*.txt' -exec grep -H 'foo' {} + 一次:

grep

在任何一种情况下,find . -name '*.txt' -exec grep -H 'foo' {} ';' 就像是来自{}的值的占位符;如果您的shell是zsh,则可能需要将其转义,如find

答案 1 :(得分:0)

通常有一个内置于find的功能,但是为了跨平台移植,我通常使用xargs。假设您要直接在当前或下面找到所有xml文件,并获取每次出现的' foo'的列表,您可以这样做:

find ./ -type f -name '*.xml' -print0 | xargs -0 -n 1 grep -H foo

它应该是不言自明的,除了-print0,它用NUL而不是换行符分隔文件名,以及-0,它告诉xargs使用那些NUL而不是将空格和引号解释为语法(如果文件名包含,可能会混淆它。)

答案 2 :(得分:0)

有几种方法可以实现这一目标。

  1. 如果有非.txt个文件可能会有用地包含关键字:
  2. grep -r KEYWORD *
    

    这使用grep的递归目录搜索选项。

    1. 仅搜索.txt个文件:
    2. find . -name '*.txt' -exec grep KEYWORD {} \;
      
           

      find . -name '*.txt' -exec grep KEYWORD {} +
      
           

      find . -execdir grep KEYWORD {}
      

      第一个为每个匹配的文件运行grep。第二个运行grep的次数少得多,在每个目录中调用grep. The third form runs grep`之前累积了许多匹配的文件。