免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1559 | 回复: 6
打印 上一主题 下一主题

[系统管理] 邮件删除脚本改进 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-31 14:24 |只看该作者 |倒序浏览
哪位大侠帮忙看看这段脚本如果再进行优化的话该如何改进能提高执行效率呢?多谢多谢,不胜感激。

#!/bin/sh
#

if [ ! -d /home/mail/queue/mess ]
then
echo "exit"
exit
fi

cd /home/mail/queue

ls mess|while read msgdir
do
echo $msgdir
cd /home/mail/queue/mess/$msgdir
ls|while read ofl
do
fl=`head -20 $ofl | grep MAILER-DEAMON |grep -i From`        \\并联分析,查找“来自发信人”“MAILER-DEAMON”的邮件
if [ x"$fl" != x ]
then
  echo $ofl
  if [ -f /home/mail/queue/info/$msgdir/$ofl ]
  then
  echo ----$ofl
  rm -f $ofl
  rm -f /home/mail/queue/info/$msgdir/$ofl
  rm -f /home/mail/queue/remote/$msgdir/$ofl
  rm -f /home/mail/queue/emsg/$msgdir/$ofl
  rm -f /home/mail/queue/intd/$ofl
  rm -f /home/mail/queue/pid/$ofl
  rm -f /home/mail/queue/todo/$ofl
  rm -f /home/mail/queue/bounce/$ofl
  else
  if [ -f /home/mail/queue/todo/$ofl ]
  then
  echo ----$ofl
  rm -f $ofl
  rm -f /home/mail/queue/info/$msgdir/$ofl
rm -f /home/mail/queue/remote/$msgdir/$ofl
  rm -f /home/mail/queue/emsg/$msgdir/$ofl
  rm -f /home/mail/queue/intd/$ofl
  rm -f /home/mail/queue/pid/$ofl
  rm -f /home/mail/queue/todo/$ofl
  rm -f /home/mail/queue/bounce/$ofl
  else
  echo "reserve"
fi
  fi
fi
done
done
exit

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [报告]
发表于 2012-11-01 09:07 |只看该作者
没测过,大概的给简化了一下。
1. 目录名如果被重复用的话,用变量替代。
2. 两次 if-then-else-fi 可以合并成一个if + 或  语句。
3. 8 个连续的rm语句,可以用一个find +exec 来替代。
  1. #!/bin/sh
  2. #

  3. MAILPATH=/home/mail/queue

  4. if [ ! -d $MAILPATH/mess ]
  5. then
  6.   echo "exit"
  7.   exit
  8. fi

  9. cd $MAILPATH

  10. ls mess|while read msgdir
  11. do
  12.   echo $msgdir
  13.   cd $MAILPATH/mess/$msgdir
  14.   ls|while read ofl
  15.   do
  16.      fl=`head -20 $ofl | grep MAILER-DEAMON |grep -i From`        \\...............MAILER-DEAMON....
  17.      if [ x"$fl" != x ]
  18.      then
  19.         echo $ofl
  20.         if [ -f $MAILPATH/info/$msgdir/$ofl ] || [ -f $MAILPATH/todo/$ofl ]
  21.         then
  22.              echo ----$ofl
  23.              find $MAILPATH -type d -name "$ofl" -exec rm -rf {} \;
  24.          else
  25.              echo "reserve"
  26.          fi
  27.     fi
  28.   done
  29. done
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
3 [报告]
发表于 2012-11-02 16:45 |只看该作者
看到 lz 的“多谢多谢,不胜感激”,还以为是“不谢”呢。

论坛徽章:
0
4 [报告]
发表于 2012-11-13 15:57 |只看该作者
多谢版主~~~现在貌似还有一个问题,优化后的脚本执行没有问题,但是find $MAILPATH/*/ -type d -name "$ofl" -exec rm -rf {} \;这句里的rm好像没起作用,执行时rm并没有后台删除掉指定的文件,执行完毕后需要删除的依然存在~~~求大师指点~~~回复 2# rdcwayx


   

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
5 [报告]
发表于 2012-11-14 08:28 |只看该作者
@soulzbg不清楚,不过我的命令是

find $MAILPATH

你的是find $MAILPATH/*/

或许是根本就没有找到。 可以把find命令改成下面的代码,看看有没有输出。
  1. find $MAILPATH -type d -name "$ofl" -exec echo rm -rf {} \;
复制代码

论坛徽章:
0
6 [报告]
发表于 2012-11-14 10:20 |只看该作者
改成您说的find $MAILPATH -type d -name "$ofl" -exec echo rm -rf {} \;了,还是不能后台真实删掉,以下是执行时显示的执行过程,劳烦您再帮忙看下呗~~
60
2951060
----2951060
5432560
----5432560
5435560
----5435560
5436060
----5436060
5439060
----5439060
61
2949561
----2949561
2950561
----2950561
2951561
----2951561
5433561
----5433561
5438061
----5438061
62
2949562
----2949562
2950062
----2950062
2951062
----2951062
5433062
----5433062
5435062
----5435062
63
2950063
----2950063
5433563
----5433563
5434063
----5434063
5439063
----5439063
64
2949564
----2949564
2950564
----2950564
2951564
----2951564
5432564
----5432564
5435064
----5435064
5436064
----5436064
5437564
----5437564
5438064
----5438064
5438564
----5438564
65
2950065
----2950065
2950565
----2950565
2951065
----2951065
2951565
----2951565
5434565
----5434565
5436565
----5436565
5437065
----5437065
5438065
----5438065
回复 5# rdcwayx


   

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
7 [报告]
发表于 2012-11-14 10:45 |只看该作者
自己试着调试吧,毕竟你的环境别人看不到。

find 后跟 -exec echo rm -rf {}\;应该是可以看到输出的,如果没有输出,就是其他部分出错了。你给的输出看不懂啊。 

自己在脚本里多添加些调试信息看看。 
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP