Linux 如果不包含特定文件,请给出父文件夹名称

Linux 如果不包含特定文件,请给出父文件夹名称,linux,terminal,Linux,Terminal,我正在寻找一个终端linux命令,以给出不包含特定文件的文件夹父名称: 现在,我使用以下命令: find . -type d -exec test -e '{}'/recon-all.done \; -print| wc -l 这给了我包含文件的文件夹数量 文件recon all.done将位于/subject/./../recon all.done中,我需要每个不包含recon all.done文件的“subject”名称。在目录中循环,测试文件是否存在,如果测试失败,则打印目录 for s

我正在寻找一个终端linux命令,以给出不包含特定文件的文件夹父名称: 现在,我使用以下命令:

find . -type d -exec test -e '{}'/recon-all.done \; -print| wc -l
这给了我包含文件的文件夹数量


文件
recon all.done
将位于
/subject/./../recon all.done
中,我需要每个不包含
recon all.done
文件的“subject”名称。

在目录中循环,测试文件是否存在,如果测试失败,则打印目录

for subject in */; do
    if ! [ -e "${subject}scripts/recon-all.done" ]
    then echo "$subject"
    fi
done
你的命令

find . -type d -exec test -e '{}'/recon-all.done \; -print| wc -l
差不多完成了,我们只需要

  • 删除
    | wc-l
    以显示目录路径,该路径不包含
    recon all
    文件
  • 现在,我们可以通过添加
    来否定
    -exec测试
    像这样:
find-d型\-exec test-e'{}'/recon-all.done\-打印
这样,如果
find
不包含
recon all
文件,则
find
将显示每个文件夹名称

注意;在Barmar的基础上,我添加了一个
-maxdepth 1
,以防止检查更深层次的目录


来自我的本地机器的小示例:

$/tmp/test$树
.
├── A.
│   └── test.xt
├── B
├── C
│   └── test.xt
└── x
├── A.
│   └── test.xt
└── B
6个目录,3个文件
$/tmp/test$find-最大深度1-类型d\-exec test-e'{}/test.xt'\-打印
.
/b
./x
$/tmp/测试$

非常感谢您的回复。然后我得到所有不包含该文件的子文件夹,但我只需要父文件夹。文件recon-all.done始终位于以下文件夹中:./subject/scripts/recon-all.done这与您的问题不同。如果您知道
scripts
子目录中始终有
find
,则不需要使用它。只需检查
$subject/scripts/recon all。完成
非常感谢您的回复。然后我得到所有不包含该文件的子文件夹,但我只需要父文件夹。文件recon-all.done始终位于以下文件夹中:./subject/scripts/recon-all.done。我只需要主题文件夹名。)主题文件夹包含许多其他文件夹)啊,只是为了降低速度:)我刚刚用
max depth
更改了答案以防止出现这种情况,请参见我的示例,它应该与您的情况相匹配。