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

Linux命令行:执行rm *.jpg时存储匹配文件名及获取*匹配文件名方法

如何存储通配符匹配到的文件名?

嘿,这两个问题本质上是一回事儿——都是要捕获shell通配符展开后的文件名,我来给你捋清楚最靠谱的做法:

1. 执行rm *.jpg时存储匹配的文件名

shell在执行任何命令前,会先把通配符(比如*.jpg)展开成实际的文件名列表。所以我们可以先把匹配结果存到数组里,再执行删除操作,这样既保留了文件名,又完成了删除:

# 第一步:把所有匹配的.jpg文件存入数组(数组能安全处理带空格/特殊字符的文件名)
jpg_files=(*.jpg)

# 可选:验证一下匹配到的内容
echo "即将删除的文件:${jpg_files[@]}"

# 第二步:执行删除操作
rm "${jpg_files[@]}"

如果担心没有匹配到任何文件时,shell会把*.jpg当成一个字符串处理(比如尝试删除名为*.jpg的文件),可以先开启nullglob选项,让无匹配时通配符展开为空:

shopt -s nullglob  # 开启无匹配时通配符为空的选项
jpg_files=(*.jpg)

if [ ${#jpg_files[@]} -eq 0 ]; then
    echo "没有找到任何.jpg文件"
else
    rm "${jpg_files[@]}"
fi
shopt -u nullglob  # 用完可以关闭,恢复默认行为

2. 用*匹配文件时获取文件名

同样,最安全的方式还是用数组存储,尤其是当文件名包含空格、引号等特殊字符时:

# 把所有匹配*的文件存入数组
matched_files=(*)

# 遍历数组查看每个文件名
for file in "${matched_files[@]}"; do
    echo "匹配到文件:$file"
done

如果只是临时查看匹配结果,也可以用printf逐行输出(比echo *更靠谱,能正确显示带空格的文件名):

printf "匹配到的文件:\n%s\n" *

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:20:57