You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Linux的find命令查找不包含特定类型文件的目录?

如何使用Linux的find命令查找不包含特定类型文件的目录?

嘿,刚接触Linux的小伙伴,这个需求完全可以用find命令实现,我给你两种实用的方法,都是日常工作里常用的:

方法一:直接用find结合-exec做检查

这个思路很直接:先定位所有目录,然后逐个检查该目录下有没有.jpg文件,如果没有就把目录路径打印出来。

命令如下:

find /你要搜索的路径 -type d -exec sh -c '! ls {}/*.jpg 2>/dev/null' \; -print

我给你拆解下每个部分:

  • -type d:只筛选目录,排除普通文件、链接等其他类型
  • -exec sh -c '! ls {}/*.jpg 2>/dev/null' \;:对每个找到的目录执行shell命令,! ls {}/*.jpg表示如果ls找不到该目录下的.jpg文件(命令执行失败),就符合我们的条件;2>/dev/null是把ls找不到文件时的错误提示丢弃,避免干扰输出
  • -print:当前面的条件满足时,输出该目录的路径

方法二:先找包含目标文件的目录,再取反

如果觉得第一种方法有点绕,也可以换个思路:先找出所有包含.jpg文件的目录,然后在所有目录里排除这些目录,剩下的就是你要找的内容。

命令可以这么写:

find /你要搜索的路径 -type d -not -path "$(find /你要搜索的路径 -name "*.jpg" -printf "%h\n" | sort -u)"

拆解一下关键部分:

  • 内层命令find /你要搜索的路径 -name "*.jpg" -printf "%h\n" | sort -u:找出所有.jpg文件所在的目录,%h用于提取文件的目录部分,sort -u是为了去重,避免重复的目录被多次列出
  • 外层find用-not -path排除掉这些包含.jpg的目录,剩下的就是不包含.jpg文件的目录

小提示

  • 如果要搜索当前目录,直接把/你要搜索的路径换成.即可
  • 这两种方法都会自动递归搜索所有子目录,不需要额外添加参数
  • 要是你想查找不包含其他类型文件的目录,比如.png,只需要把命令里的*.jpg替换成*.png就可以啦

备注:内容来源于stack exchange,提问作者Daydreamer067

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 07:04:50