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

如何用通配符提取目录中唯一.datt文件的文件名根名?

解决提取唯一.datt文件根名的问题

你的脚本出错是因为直接用myfile=*.datt赋值后,shell的通配符展开机制可能导致意外结果,尤其是当目录中有其他文件时,变量展开会出现混乱。下面是几种可靠的解决方法:

方法一:用数组捕获匹配文件(推荐)

利用数组存储所有匹配的.datt文件(因为你说目录里只有一个,所以数组只有一个元素),再提取根名:

# 将所有.datt文件存入数组
datt_files=(*.datt)
# 取数组第一个元素(唯一的目标文件)
target_file="${datt_files[0]}"
# 移除.datt后缀得到根名
root_name="${target_file%.datt}"
# 输出结果
echo "$root_name"

方法二:用find命令精准定位

如果需要确保只找到当前目录下的普通文件,可用find命令:

# 查找当前目录下的.datt文件,只取第一个结果
target_file=$(find . -maxdepth 1 -type f -name "*.datt" | head -n 1)
# 先移除路径前缀(./),再移除后缀
root_name="${target_file##*/}"
root_name="${root_name%.datt}"
echo "$root_name"

方法三:简化写法(适用于确定只有一个.datt文件的场景)

# 直接通过ls和sed提取根名
root_name=$(ls *.datt | sed 's/\.datt$//')
echo "$root_name"

为什么原脚本出错?

原脚本中myfile=*.datt赋值后,若后续操作未用双引号包裹变量,shell会对变量值再次执行通配符展开和分词操作,导致${myfile%.datt}处理的不是单个文件名,而是一堆混乱的文件列表,最终输出错误结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:33:29