记清理头像图片项目

背景:

服务器存放头像位置    /home/server/upload/avatar/

一种存放方式为...在这个路径下建一个以用户uid命名的文件夹..下面在存入用户头像

二种存放方式为...在这个路径下有一个叫(null) 的文件夹.里面存了用户头像图片.....图片都是时间戳命名.找不出是哪个用户的..这是研发写的bug

mysql数据库中用户表有个字段叫avatar存放了其头像图片的完整连接如 http://13.125.14.158:9999/upload/avatar/819/15656323565.png

http://13.125.14.158:9999/upload/avatar/(null)/15656323565.png

还有一种用户头像为系统默认头像   即阿拉伯数字  1.2 .3等

起因:

    头像服务器硬盘占用马上爆满..

分析:

     用户注销后,研发没有即时删除其头像图片

     用户换头像后..也没有即时删除其旧头像图片,导致硬盘占用快速增涨

准备数据:

  导出新版更新后上线过的用户头像连接 

    select avatar from user where uid in (select uid from im_user_detail)   此sql不作多余解说

将导出的数据保存为user.txt传到linux中

cat user.txt |grep upload|grep null >usernull.txt    选出使用(null)文件夹头像的数据

awk -F ")/" '{print $2}'  usernull.txt > usernull1.txt    直接选择出图片文件名

cat user.txt |grep -v null |grep upload >userfile.txt   选 出使用uid文件夹存放图片的数据

awk -F "avatar" '{print $2}' userfile.txt > userfile1.txt   去掉前缀  余下

awk -F "/" '{print $1}'  userfile1.txt >userfile2.txt   去掉后缀..只留uid文件夹名

进入(null)文件夹   ls > null.txt  取得服务器现存的图片

进入avatar文件  ls > file.txt  取得服务器现存的uid文件夹  在file.txt中删掉(null)这个名字

将usernull1.txt   userfile1.txt   null.txt file.txt  导出  并在文件第一行加入id两个字符便于插入数据库

将四个文件全部导入mysql..对应四张表  usernull1  userfile null file

select * from null where id not in (select id from usernull1)           选 择出null文件夹中现有用户没有使用的头像图片

select * from file where id not in (select id from userfile)               选 择出avatar下现有用户没有使用的uid文件夹

依次存为delnull.txt    delfile.txt

 

 

编写脚本:

   数据有了..本来以为一个很简单 的for  in就可以将多余的图片.文件夹删除..后面发现错了..由于编码还是什么的问题..我也不知道哪有问题.一直删不掉..经过多次测试.发现图片名和文件夹名后面多了一个^M

file=`cat delnull.txt`
echo file in group ok
for pic in ${file[*]}
do
     cd /home/server/upload/avatar/\(null\)&& pwd &&  rm -fr $pic
     echo "delete $pic ok" 
done

开始用了这个不行...后面改为del.sh

#!/bin/bash
file=`cat delfile.txt`
for a in ${file[*]}
do
    echo "rm -fr /home/server/upload/avatar/$a"   
done

./del.sh >11.sh

cat 11.sh

:%s/^M//g     替换掉后面的怪符号   注意^M打法是   按住ctrl 不放再按v 和m

最后执行11.sh将文件夹删除...null中图片删除同理..

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值