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

CentOS7下Shell脚本删除文件失效,请求语法排查与解释

Shell脚本删除文件失败的问题排查与修复

原命令存在的错误:

  • 拼写错误:xagrs是错误拼写,正确命令为xargs
  • 管道逻辑错误:echo "$i" >> $path_log/server1_$DATE.log 将输出重定向到日志文件后,该命令的标准输出为空,后续xargs无法获取输入,导致删除命令根本不会执行。若要同时完成日志记录和传递内容给xargs,需使用tee命令而非直接重定向。
  • 未初始化变量:$DATE变量未定义,日志文件名将变为server1_.log,需提前用date命令初始化该变量。
  • 冗余管道调用:通过echo "rm -f %" | sh执行删除完全没必要,xargs可直接调用rm命令,更安全高效。

修正后的脚本写法(两种可选)

写法一:保留xargs+tee

list_services="/nfs/backup/service1.tar.gz
/nfs/backup/service2.tar.gz
/nfs/backup/service3.tar.gz"
path_log='/var/log/'
# 初始化DATE变量,可根据需求调整日期格式(如%Y%m%d%H%M)
DATE=$(date +%Y%m%d)

for i in $list_services
do
    # 使用tee -a追加写入日志,同时将内容传递给xargs执行删除
    echo "$i" | tee -a "$path_log/server1_$DATE.log" | xargs -I % rm -f %
done

写法二:直接循环处理(更直观易维护)

list_services="/nfs/backup/service1.tar.gz
/nfs/backup/service2.tar.gz
/nfs/backup/service3.tar.gz"
path_log='/var/log/'
DATE=$(date +%Y%m%d)

for i in $list_services
do
    # 先记录日志,再执行删除
    echo "$i" >> "$path_log/server1_$DATE.log"
    rm -f "$i"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:45:30