我需要用两个关键字搜索整个文件夹,比如ball和bat。unix文件夹中有10k个文件。所以我需要使用一个命令来搜索该文件夹中的所有文件,该文件夹中有这两个关键字。搜索必须使用文件方式。下面的命令用于搜索单个文件,但我需要按文件搜索整个文件夹。
grep [args] -e ball -e bat file1.xml
上面的命令告诉我这两个关键字是否存在于该文件中。但我需要的是文件夹中有这两个关键字的文件。
ball
或bat
,则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
,所以结果是包含两者的文件的列表。