Unix在整个文件夹中搜索命令



我需要用两个关键字搜索整个文件夹,比如ballbat。unix文件夹中有10k个文件。所以我需要使用一个命令来搜索该文件夹中的所有文件,该文件夹中有这两个关键字。搜索必须使用文件方式。下面的命令用于搜索单个文件,但我需要按文件搜索整个文件夹。

grep [args] -e ball -e bat file1.xml

上面的命令告诉我这两个关键字是否存在于该文件中。但我需要的是文件夹中有这两个关键字的文件。

如果文件包含ballbat,则

grep [args] -e ball -e bat file1.xml将匹配,而这似乎不是您想要的。如果这是你想要的,你可以做:

find "$dir" -type f -exec grep -l -e ball -e bat {} ;

其中$dir是要搜索的根目录。但是,如果你想找到所有包含这两个单词的文件,你需要做一些不同的事情。也许:

find "$dir" -type f -exec sh -c 'grep -q ball $1 && grep -q bat $1' _ {} ; -print

find "$dir" -type f -exec sh -c 'grep -q ball $1 && grep -l bat $1' _ {} ;

如果在该文件夹中执行grep -e ball -e bat *,应该可以工作。

您可以使用两个-exec步骤:

find . -type f 
-exec grep -q 'ball' {} ; 
-exec grep -l 'bat' {} +

第一个-exec步骤保留所有包含ball的文件——使用print而不是第二个-exec步骤来查看是什么文件。

第二个-exec步骤列出了包含bat的文件的名称,并且因为它们已经被过滤为包含ball,所以结果是包含两者的文件的列表。

最新更新