在Linux中搜索与特定模式匹配的所有子文件夹中的文件

在Linux中搜索与特定模式匹配的所有子文件夹中的文件,linux,bash,shell,Linux,Bash,Shell,我有一个目录树,如下所示。 换句话说,根目录包含多个子目录,具有任意名称。每个文件夹可能包含两个文件夹:“OK”和“NotOK”。这些文件夹包含分类为“快乐”或“悲伤”的图像,它们的名称反映了这一点 root/ dir0/ OK/ img_happy_001.png img_happy_002.png img_sad_001.png ... NotOK/

我有一个目录树,如下所示。 换句话说,根目录包含多个子目录,具有任意名称。每个文件夹可能包含两个文件夹:“OK”和“NotOK”。这些文件夹包含分类为“快乐”或“悲伤”的图像,它们的名称反映了这一点

root/
    dir0/
        OK/
            img_happy_001.png
            img_happy_002.png
            img_sad_001.png
            ...
        NotOK/
            img_happy_103.png
            img_happy_104.png
            img_sad_72.png
            ...
    dir1/
        OK/
            img_happy_501.png
            img_sad_233.png
            ...
        NotOK/
            img_happy_703.png
            img_happy_704.png
            img_sad_298.png
            ...
    ...
我可以很容易地找到所有被归类为“快乐”的图片

find . -name "*happy*.png"

但是,我想找到所有分类为“快乐”的图像,它们都在“确定”目录中。我该怎么做

我使用

find . -type d -name "OK" -exec find {} -name "*happy*" \; 

我通过使用

find . -type d -name "OK" -exec find {} -name "*happy*" \; 

您可以简单地将find的结果导入grep:

find-名称“*happy*.png”| grep-v NotOK

grep
命令将过滤
find
中不包含
NotOK
的结果

或者,您可以查看find中的
--全名
选项

我相信你会需要这样的东西:


find-名称“*happy*.png”-wholename“\*/OK\*”

您只需将find的结果导入grep即可:

find-名称“*happy*.png”| grep-v NotOK

grep
命令将过滤
find
中不包含
NotOK
的结果

或者,您可以查看find中的
--全名
选项

我相信你会需要这样的东西:


find-名称“*happy*.png”-wholename“\*/OK\*”

您可以使用路径选项,尝试
查找-路径“dir*/OK/*happy*”
@geckos我不确定这是否有效,因为
path
的作用域似乎有限。您可以使用路径选项,请尝试
find-路径“dir*/OK/*happy*”
@geckos我不确定这是否有效,因为
path
似乎有一个有限的作用域。这样,您必须运行
find
两次,而如果您使用
-wholename
选项,您只需运行一次,这样您就必须运行
find
两次,而如果您使用
-wholename
选项您可以通过一次跑步完成