Bash循环处理备份文件时执行rm命令删除失败求助
问题分析与解决
核心错误原因
你代码里的x="(arr+=($line))"是完全错误的写法:这把文件路径包装成了数组添加的语法字符串,而非实际的文件路径。rm执行时会把这个整串当成文件名去查找,自然会提示找不到文件。
解决方案
方案1:直接删除文件(无需数组)
如果不需要将文件路径存入数组,直接用read读取到的line变量即可,修正后的代码如下:
while read -r line; do echo "$line" rm "$line" done < ./old_backups.txt
- 给
read加-r参数,避免路径中的转义字符被错误解析; - 变量加双引号
"$line",防止路径包含空格、特殊字符时被shell拆分,导致删除失败。
方案2:需要将路径存入数组再操作
如果确实需要收集文件路径到数组中,要使用正确的数组赋值方式,而非把数组操作语句存成字符串:
# 初始化空数组 arr=() while read -r line; do echo "$line" # 正确向数组添加元素 arr+=("$line") # 执行删除操作 rm "$line" done < ./old_backups.txt # 若后续需要批量操作数组中的路径,可使用 # rm "${arr[@]}"
内容的提问来源于stack exchange,提问作者user23562505
相关产品推荐
相关产品推荐

