linux – 如何在父目录和子目录中查找具有特定模式的文件?

如何使用单个命令在我当前工作目录的父目录和子目录中查找具有特定模式的文件?

文件名 – test.txt,该文件具有nslookup模式

该文件存在于3个目录中,它们是/ home,/ home / 1和/ home / 1/2

我目前在/ home / 1.我试过以下命令:

find ../ -type f -name "test.txt"

输出:

../test.txt
../home/1/test.txt
../home/1/2/test.txt

我能够找到文件,因此我尝试了以下命令:

$find ../ -type f -exec grep "nslookup" {} \;
nslookup
nslookup
nslookup

这不显示文件名.

命令:

find . -type f -name "test.txt" | xargs grep "nslookup"

==>给我pwd和子目录中的文件:

./1/test.txt:nslookup
./test.txt:nslookup

但是当我尝试在父目录中搜索如下所示时,结果是错误的:

find ../ -type f -name "test.txt" | xargs grep "nslookup"

User@User-PC ~/test
$uname -a
CYGWIN_NT-6.1 User-PC 2.5.2(0.297/5/3) 2016-06-23 14:29 x86_64 Cygwin
最佳答案
你的命令

find ../ -type f -exec grep "nslookup" {} \;

几乎是正确的,除了grep默认情况下,只给出一个文件来显示文件名.

以下是解决此问题的两种方法:

>使用具有非标准(但常见)-H选项的grep始终显示文件名:

find ../ -type f -exec grep -H 'nslookup' {} \;

>给grep至少两个文件名:

find ../ -type f -exec grep 'nslookup' /dev/null {} \;

如果您只对文件名感兴趣,那么这有两种方法:

>对grep使用标准-l选项:

find ../ -type f -exec grep -l 'nslookup' {} \;

>如果包含匹配项,请输出文件的路径名:

find ../ -type f -exec grep -q 'nslookup' {} \; -print

在这里,我们只使用grep来检测模式是否匹配.它的-q选项阻止它输出任何内容,find将使用该实用程序的退出状态来确定是否执行-print操作.

转载注明原文:linux – 如何在父目录和子目录中查找具有特定模式的文件? - 代码日志