Linux 查找深度为1但不包含文件的子目录

Linux 查找深度为1但不包含文件的子目录,linux,bash,command-line,Linux,Bash,Command Line,我正在做一个开源项目。在深度1的大多数(但不是全部)子目录中,可以找到一个名为“test.c”的文件。我如何找到那些不包含“test.c”的目录 例如,我有子目录dir1、dir2、dir3。Dir2和dir3有“test.c”。我必须用“ls”手动检查它们,以确定“dir1”没有“test.c”。也许有一种更简单的方法(比如bash命令)可以做到这一点?我16岁以下。因此,最好使用bash命令 您可以从所有子目录的基本目录中使用此find命令: find . -type d -exec bas

我正在做一个开源项目。在深度1的大多数(但不是全部)子目录中,可以找到一个名为“test.c”的文件。我如何找到那些不包含“test.c”的目录


例如,我有子目录dir1、dir2、dir3。Dir2和dir3有“test.c”。我必须用“ls”手动检查它们,以确定“dir1”没有“test.c”。也许有一种更简单的方法(比如bash命令)可以做到这一点?我16岁以下。因此,最好使用bash命令

您可以从所有子目录的基本目录中使用此
find
命令:

find . -type d -exec bash -c 'for d; do [[ -f "$d"/test.c ]] || echo "$d"; done' - {} +

此命令查找当前目录中的所有子目录,并检查bash命令中每个目录中是否存在文件
test.c
。如果文件不存在,则会打印目录名。

谢谢您的回答。我理解“find”语法,但是你能解释一下-exec之后的部分吗?特别是,我想将搜索限制在深度1上的目录。如何使用您的命令执行此操作?您可以使用
-maxdepth 1
将深度限制为1<代码>[[-f“$d”/test.c]]是返回成功的条件。
test.c
存在于目录
$d
中<代码>| | echo在条件不成功时执行
echo
命令,因此在文件不存在时执行
echo
。还有一件事:“{}+”是什么意思?
-{}
bash-c
命令行的参数
-
作为
$0
的伪参数,而
{}
find
命令中的当前目录名,它作为
bash-c
命令行的剩余参数。