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
相关产品推荐
相关产品推荐

