Bash 查找其中一个文件中不存在字符串的子目录

Bash 查找其中一个文件中不存在字符串的子目录,bash,Bash,我在Linux中有一个包含很多子目录的目录 每个子目录都包含一个名为variables\u list.txt的文件 现在,在每个variables\u list.txt文件中,我想检查字符串是否存在 例如: 如果字符串如下所示 export host_name= grep -r -l "export host_name=" . 我想找出variables\u list.txt文件中字符串不存在的所有子目录 我试着像下面一样 export host_name= grep -r -l "exp

我在
Linux
中有一个包含很多子目录的目录

每个子目录都包含一个名为
variables\u list.txt的文件

现在,在每个
variables\u list.txt
文件中,我想检查字符串是否存在

例如:

如果字符串如下所示

export host_name=
grep -r -l "export host_name=" .
我想找出
variables\u list.txt
文件中字符串不存在的所有子目录

我试着像下面一样

export host_name=
grep -r -l "export host_name=" .
这将打印字符串所在的所有文件名

我也试过下面的方法

grep -Hrn "export host_name=" 
这还会打印字符串所在的所有文件名以及行号


我可以实现我想要的

您可以将grep结果传送到
dirname

grep -v -Z -r -l "export host_name=" .  | xargs -0 dirname
例如:

$ mkdir {1..10}
$ mkdir 'test dir with space'
$ echo export host_name= >> 2/variables_list.txt
$ echo export host_name= > 3/variables_list.txt
$ echo export host_name= > 4/variables_list.txt
$ echo export host_name= > 5/variables_list.txt
$ echo export host_nname= > 'test dir with space'/variables_list.txt
$ echo export hostt_name= > 3/variables_list.txt
$ find . -name variables_list.txt -exec sh -c 'grep "export host_name=" "$1" >/dev/null || echo "$(dirname "$1")"' sh {} \;
./3
./test dir with space

当我尝试你给出的grep命令时,我得到了目录中的所有文件。我只想找到
variables\u list.txt
文件中不存在字符串的目录名。你没有得到文件名,你得到的是目录名。如果我的示例没有反映您的设置,请告诉我出了什么问题,我会进行更改。我要做的是只检查每个目录中的
variables\u list.txt
文件,如果
variables\u list.txt
文件中没有该字符串,则只打印目录名。我不想检查目录中的其他文件。太好了!这就是我要找的