【问题标题】:Give out parent folder name if not containing a certain file如果不包含某个文件,则给出父文件夹名称
【发布时间】:2021-05-08 02:35:17
【问题描述】:

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

find . -type d -exec test -e '{}'/recon-all.done \; -print| wc -l

这给了我包含然后文件的文件夹数量。

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

【问题讨论】:

    标签: linux terminal


    【解决方案1】:

    遍历目录,测试文件是否存在,如果测试失败则打印目录。

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

    【讨论】:

    • 非常感谢您的回复。然后我得到所有不包含该文件的子文件夹,但我只需要父文件夹。文件 recon-all.done 始终位于以下文件夹中:./subject/scripts/recon-all.done
    • 这和你的问题不一样。如果您知道find 始终位于scripts 子目录中,则无需使用它。只需检查$subject/scripts/recon-all.done
    【解决方案2】:

    你的命令;

    find . -type d -exec test -e '{}'/recon-all.done \; -print| wc -l
    

    几乎完成了这项工作,我们只需要这样做

    • 删除| wc -l以显示目录路径witch不包含recon-all文件
    • 现在,我们可以通过添加!否定-exec test,如下所示:
    find . -type d \! -exec test -e '{}'/recon-all.done \; -print
    

    这样find 将显示每个文件夹名称,如果它不包含 recon-all 文件

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


    我本地机器上的小例子:

    $ /tmp/test$ tree
    .
    ├── a
    │   └── test.xt
    ├── b
    ├── c
    │   └── test.xt
    └── x
        ├── a
        │   └── test.xt
        └── b
    
    6 directories, 3 files
    $ /tmp/test$ find . -maxdepth 1 -type d \! -exec test -e '{}/test.xt' \; -print
    .
    ./b
    ./x
    $ /tmp/test$
    

    【讨论】:

    • 非常感谢您的回复。然后我得到所有不包含该文件的子文件夹,但我只需要父文件夹。文件 recon-all.done 始终位于以下文件夹中:./subject/scripts/recon-all.done。我只需要主题文件夹名称。 )主题文件夹包含很多其他文件夹)
    • 啊,只是慢一点 :) 我刚刚更改了答案以防止使用 max-depth 发生这种情况,请参阅我的示例,它应该符合您的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 2020-01-24
    • 1970-01-01
    • 2020-07-31
    • 2013-08-10
    相关资源
    最近更新 更多