求助:在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'
你之前命令失败的原因
- 正则未匹配完整路径:find的
-regex默认匹配整个文件路径,而你写的^M[^/]*\.txt$只会匹配路径以M开头的文件,实际当前目录下的文件路径是./Mxxx.txt,自然匹配不上。 - 语法错误:修改后的
\./'^M[^/]*\.txt$'把路径前缀写到了引号外面,导致正则字符串被截断,语法无效。 - 缺少递归限制:没加
-maxdepth 1的话,find会默认递归所有子目录,不符合你“当前目录”的需求。
内容的提问来源于stack exchange,提问作者jus0521
相关产品推荐
相关产品推荐

