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

