背景
前段时间设计的图片上传系统,考虑到它的容灾性,在删除图片时,并不会对文件进行真正的删除操作,只会在数据库对其进行逻辑删除。这样的设计带来的严重缺陷是后续运维的困难,随着系统上线的时间越来越长,冗余堆积文件越来越多,对磁盘、数据库都存在一定的压力。
解决方案
对于这个问题,只能考虑定期清理过时文件的方式。
步骤
1. 执行数据库命令,找出逻辑删除的文件
设计系统时应当考虑到后续的运维需求,在删除的时候记录删除的时间,在删选逻辑删除的文件时查找删除已久的文件,以免影响灾备。如查找逻辑删除2个月前的图片。
2. 执行脚本批量删除图片文件
- 进入到图片存储的文件夹,新建一个目录
mkdir picture-util
- 切换目录
cd picture-util
- 复制数据库的文件名粘贴到delete_list.txt 文件中
vim delete_list.txt
- 编写脚本
vim delete.sh
,如果你的需求和我差不多的话,脚本几乎不用改
#!/bin/bash
txt_file="delete_list.txt"
while IFS= read -r line; do
filename=$(echo "$line" | sed 's#.*/\([^/]*\)$#\1#')
rm "../$filename"
done < "$txt_file"
- 添加执行权限
chmod +x delete.sh
- 执行
./delete.sh