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

求助:在Bash中查找当前目录下以M开头的.txt文件失败

Bash下查找当前目录中以"M"开头的.txt文件

最简单的方法:用通配符(Glob)

如果只需要查找当前目录的文件,不用递归子目录,直接用通配符最省事:

# 列出当前目录所有M开头的.txt文件(若存在同名目录也会被列出,仅要文件看下面)
ls M*.txt

# 仅筛选文件(排除同名目录)
for f in M*.txt; do
  [ -f "$f" ] && echo "$f"
done

用find命令的正确写法

如果习惯用find,推荐用-name参数(通配符匹配文件名,无需复杂正则),加上-maxdepth 1限制仅当前目录:

find . -maxdepth 1 -type f -name 'M*.txt'

如果一定要用正则,注意find的-regex默认匹配完整文件路径(比如当前目录下的文件路径是./Mxxx.txt),不同系统的find正则语法略有区别:

  • BSD find(如macOS):需要加-E启用扩展正则,正则要匹配完整路径:
    find -E . -maxdepth 1 -type f -regex '\./M[^/]*\.txt$'
    
  • GNU find(如Linux):无需-E,直接写匹配路径的正则:
    find . -maxdepth 1 -type f -regex './M[^/]*\.txt'
    

你之前命令失败的原因

  1. 正则未匹配完整路径:find的-regex默认匹配整个文件路径,而你写的^M[^/]*\.txt$只会匹配路径以M开头的文件,实际当前目录下的文件路径是./Mxxx.txt,自然匹配不上。
  2. 语法错误:修改后的\./'^M[^/]*\.txt$'把路径前缀写到了引号外面,导致正则字符串被截断,语法无效。
  3. 缺少递归限制:没加-maxdepth 1的话,find会默认递归所有子目录,不符合你“当前目录”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:27:16