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

求匹配含'e'且'e'不在首尾的文件名的find命令及相关问题解答

解决文件名包含'e'但不在首尾的find命令问题

你之前尝试的命令核心问题是混淆了**shell通配符(glob)**和正则表达式的语法——find的-name选项默认使用shell glob规则,而非正则。要实现「文件名包含'e'但'e'不在开头或结尾」的需求,我们需要组合三个明确的条件:

  • 文件名不以'e'开头:-not -name "e*"
  • 文件名不以'e'结尾:-not -name "*e"
  • 文件名至少包含一个'e':-name "*e*"

把这些条件组合起来,最终可用的命令是:

find dir -type f -not -name "e*" -not -name "*e" -name "*e*"

用你给出的示例文件测试:emil(以e开头被排除)、eva(以e开头被排除)、extreme(以e开头被排除)、let(符合所有条件输出)、yes(符合所有条件输出),完全匹配你的期望。


五个文件筛选条件的解决方案

下面针对每个需求给出对应的find命令,并拆解逻辑:

1. 以a、z或y开头的文件

利用glob的字符集匹配规则[azy],表示文件名第一个字符是a、z、y中的任意一个:

find dir -type f -name "[azy]*"

2. 不以x、z或y开头的文件

有两种实现方式,一种用反义字符集,一种用-not否定匹配:

# 方式1:反义字符集直接匹配非目标开头
find dir -type f -name "[!xzy]*"
# 方式2:用-not否定开头匹配规则
find dir -type f -not -name "[xzy]*"

3. 仅含一个字符的文件

glob中的?代表单个任意字符,直接匹配长度为1的文件名:

find dir -type f -name "?"

4. 仅含两个字符的文件

用两个连续的??匹配长度恰好为2的文件名:

find dir -type f -name "??"

5. 仅含两个或三个字符的文件

使用-o(逻辑或)组合两个glob规则,分别对应2个和3个字符的文件名:

find dir -type f -name "??" -o -name "???"

如果你更习惯正则表达式,也可以用-regex选项(注意要匹配完整文件路径):

find dir -type f -regextype posix-extended -regex ".*/.{2,3}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:32:35