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

如何让zsh大括号展开在匹配失败后继续执行?

解决zsh中rm通配符无匹配时命令失败的问题

zsh默认会在通配符(如*.jpg)未匹配到任何文件时直接报错,终止整个命令执行,导致其他存在的目标文件也无法被删除。以下是几种可行的解决办法:

方法1:临时启用nullglob选项

开启nullglob后,无匹配的通配符会被展开为空字符串,而非报错。执行完删除操作后建议恢复默认设置,避免影响其他命令:

setopt nullglob
rm *.{jpg,jpeg,png,gif}
setopt nonullglob

如果要精简成一行:

setopt nullglob; rm *.{jpg,jpeg,png,gif}; setopt nonullglob

如果担心所有通配符都无匹配导致rm因缺少参数报错,可以加个判断逻辑:

setopt nullglob
target_files=(*.{jpg,jpeg,png,gif})
if (( $#target_files > 0 )); then
  rm "$target_files[@]"
fi
setopt nonullglob

方法2:使用find命令(跨shell通用)

如果不想修改shell选项,find命令可以更灵活地筛选并删除文件,且不会因无匹配报错:

find . -maxdepth 1 -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.gif" \) -exec rm {} +
  • -maxdepth 1:仅搜索当前目录,不递归子文件夹
  • -type f:只处理文件(排除目录)
  • -exec rm {} +:将找到的所有文件批量传给rm执行,效率比-exec rm {} \;更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:55:19