关于bash:在Linux中匹配特定模式的所有子文件夹中搜索文件

Search for files in all subfolders matching specific pattern in Linux

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
            ...
    ...

我可以很容易地找到所有被归类为"快乐"的图片

1
find . -name"*happy*.png"

不过,我想找到所有分类为"快乐"的图片,它们都在"确定"目录中。我该怎么做?


您可以简单地将find的结果通过管道传输到grep中:

find . -name"*happy*.png" | grep -v NotOK

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

或者,您可以查看find中的--whole-name选项。

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

find . -name"*happy*.png" -wholename"\*/OK\*"


我用

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