在Linux中搜索与特定模式匹配的所有子文件夹中的文件
我有一个目录树,如下所示。 换句话说,根目录包含多个子目录,具有任意名称。每个文件夹可能包含两个文件夹:“OK”和“NotOK”。这些文件夹包含分类为“快乐”或“悲伤”的图像,它们的名称反映了这一点在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/
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
选项您可以通过一次跑步完成