清理论坛已删除帖子的附件的操作流程

作者在 2025-12-19 19:55:55 发布以下内容
1、打开phpmyadmin,进入数据库bcbbs,点击“SQL”,运行如下语句:
SELECT a.attachment FROM `cdb_attachments` a left join cdb_posts p on a.pid=p.pid where p.invisible=0

2、在显示结果的最下面点击“导出”,格式选择最下面的“Texy! text”,点击“执行”

3、把下载到的“cdb_attachments.txt”只保留文件名列表部分,把“|”替换为空。

4、把文件上传到bccnsoft的“/mnt/var/remotefiles/bbs_bccn_net.bccnsoft.com_data/006/”,登陆服务器进入这个目录。

5、打开ipython,逐步运行如下命令:
import os
import re
import glob

# 获取数据库中的文件列表
with open('cdb_attachments.txt', 'r', encoding='utf-8') as file:
    al = file.readlines()
al = [i.removeprefix("|").removesuffix("\n") for i in al]

# 获取当前文件夹下的文件列表
fl = glob.glob('./**/*.*', recursive=True)
fl = [i.removeprefix("./") for i in fl]
fl = [i for i in fl if not re.search("\.\w{2,5}\.webp", i)]

fl_big = [i for i in fl if '.thumb' not in i]
fl_thumb = [i for i in fl if '.thumb' in i]

# 删除数据库中不存在的文件
set_big_del = set(fl_big) - set(al)

for f in set_big_del:
    if os.path.isfile(f):
        print("删除:" + f)
        os.remove(f)
    else:
        print("文件不存在:" + f)

# 清理主图已不存在的缩略图
set_big_remain = set(fl_big) - set_big_del
thumb_del = [i for i in fl_thumb if i.split('.thumb')[0] not in set_big_remain]

for f in thumb_del:
    if os.path.isfile(f):
        print("删除:" + f)
        os.remove(f)
    else:
        print("文件不存在:" + f)

找出源文件已不在的webp文件
find . -type f \
  -regextype posix-extended \
  -regex '.*\.[[:alnum:]]{2,5}\.webp$' \
  -print0 | while IFS= read -r -d '' webp; do
  src="${webp%.webp}"
  if [ ! -f "$src" ]; then
    echo "$webp"
  fi
done 

作者在 2025-12-19 20:02:53 补充以下内容
删除被删帖子的附件记录
delete a from `cdb_attachments` a left join cdb_posts p on a.pid=p.pid where p.invisible=-1 
删除被删帖子记录
delete from cdb_posts where invisible=-1

论坛维护 | 阅读 906 次
文章评论,共0条
游客请输入验证码
浏览3083500次
文章归档
最新评论
  • 静夜思:感受ai的强大魔力吧👍
  • 静夜思:-1是多核