【问题标题】:Finding subdirectories of depth 1 that do _not_ include a file查找不包含文件的深度为 1 的子目录
【发布时间】:2019-05-27 11:57:21
【问题描述】:

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

例如,我有子目录 dir1、dir2、dir3。 Dir2 和 dir3 有“test.c”。我必须用“ls”手动检查它们以确定“dir1”没有“test.c”。可能有一种更简单的方法(例如 bash 命令)可以做到这一点?我在 Ubuntu 16 下。所以首选 bash 命令。

【问题讨论】:

    标签: linux bash command-line


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答。我理解“查找”语法,但你能解释一下 -exec 之后的部分吗?特别是,我想将搜索限制在深度 1 上的目录。我将如何使用您的命令执行此操作?
    • 您可以使用-maxdepth 1 将深度限制为1。[[ -f "$d"/test.c ]] 是返回成功的条件test.c 存在于目录$d 中。 || echo 在条件不成功时执行 echo 命令,因此在文件不存在时执行 echo
    • 还有一件事:“- {} +”是什么意思?
    • - {}bash -c 命令行的参数。 - 作为$0 的虚拟参数,{} 是来自find 命令的当前目录名称,它作为bash -c 命令行的剩余参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 2016-07-12
    • 2018-07-19
    相关资源
    最近更新 更多