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

Shell脚本删除含空格文件名的文件失败,寻求解决方法

解决含空格文件名的删除问题

嗨,这个问题我太熟了!你遇到的核心问题是用for循环遍历find输出时,Bash会把空格当成分隔符,把带空格的文件名拆成了多个独立的项——哪怕你后来给$f加了引号,也晚了,因为循环已经把文件名切碎了。

给你两个靠谱的解决方案:

方案1:直接用find的-exec选项(最推荐)

这是最简洁也最可靠的方式,完全避开了文件名拆分的问题,让find直接处理每个找到的文件:

find "$REP" -type f -name "$Filtre" -mtime +${DelAvtPurge} -exec rm -f {} \;

这里的{}会被find替换成找到的每个完整文件名(包括空格),\;用来告诉find命令结束的位置。另外记得给$REP也加上双引号,防止你的目录路径里也有空格哦。

方案2:用while read循环代替for

如果你一定要用循环的形式,可以改成while read来读取find的输出,它会把每一行(也就是每个完整文件名)当成一个整体:

find "$REP" -type f -name "$Filtre" -mtime +${DelAvtPurge} | while read -r f; do
    rm -f "$f"
done

-r选项是为了正确处理文件名里的反斜杠字符,避免被Bash转义。同样,所有变量都要加双引号,确保路径里的空格不会搞事情。

试试这两种方法,应该就能解决你遇到的空格文件名删除问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:39:27