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

如何用find命令查找32字符长度的MD5哈希命名目录?

查找指定目录下的32字符MD5命名子目录(非递归)

我有一个包含大量子目录的目录,结构如下:

04762b39018e3cf4b1a2c6a304919b75
06e0caf156de30dd962cf6b9300aba66
1f1d0cb1b810336299cda5426d0f12f5
2fe7a428eb303da6846800fa20ab7ed4
41e0136413703b0685d6799f8a22a8e6
asdf
1234
Databases

需求是找出其中名称恰好为32字符长度(MD5哈希值格式)的子目录,且不递归查找。此前尝试的find命令未返回任何结果,希望用find命令(方便后续执行bash操作)或兼容bash的单行命令解决。

问题分析

你之前的命令:

find /root/my/subdir -maxdepth 1 -type d -regex '^.*[a-fA-F0-9]{32}$'

失败原因是-regex匹配的是完整路径而非目录名本身。比如目标目录的完整路径是/root/my/subdir/04762b39018e3cf4b1a2c6a304919b75,整个路径长度远超过32,正则无法匹配。

解决方案

方法1:调整find的-regex匹配规则

让正则匹配路径的最后一段为32位十六进制字符:

find /root/my/subdir -maxdepth 1 -type d -regex '.*/[a-fA-F0-9]{32}$'
  • .*/匹配路径中目录名之前的所有部分
  • [a-fA-F0-9]{32}$匹配结尾的32位十六进制字符(MD5格式)

方法2:使用find的-name选项(更简洁)

-name仅匹配目录名,无需考虑完整路径,结合字符范围通配符:

find /root/my/subdir -maxdepth 1 -type d -name '[a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]'

虽然写法较长,但能严格匹配32位十六进制字符的目录名。

方法3:bash通配符直接列出(非find方案)

如果不需要find,可以用bash展开直接获取目标目录:

ls -d /root/my/subdir/[a-fA-F0-9]{32} 2>/dev/null
  • 2>/dev/null用于屏蔽无匹配结果时的错误提示

执行上述任一命令后,都会输出预期的5个32字符目录名。

内容的提问来源于stack exchange,提问作者Darwick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:33:38