仓库源文站点原文


layout: post title: 清理QQ聊天记录中的图片 categories:


QQ使用时间长了以后, 聊天记录自然会变大. 当然, 如果只是文字, 再怎么多也不会占据太大空间, 关键是图片. 如果你在一些比较活跃的群里, 而群友又喜欢发图片, 又或者, 你的QQ好友比较多, 交流时候经使用图片, 那么经年累月地积攒下来, 图片所占的空间就不可小觑了.

图片占的磁盘空间大了, 自然的想法就是删除/清理聊天记录. 可恨的是, 删除聊天记录时, QQ不会删除缓存的图片. 如果你想手动删除, 看一看图片存放的位置以及命名, 就直接被劝退了

├─$$
│  ├─B$
│  │      $$B$[AGM]}5E{`NT%0TVUGQ.png
│  └─BF
│          $$BF$_[8WVS%C[DT1]07WMJ.jpg
├─$%
│  └─]6
│          $%]6U9A_8F@1A)M2C[`9UM2.jpg
├─$)
│  ├─7[
│  │      $)7[[P[JE{7$4)1MV4P6DHI.png
│  └─CS
│          $)CSO[JGSC0_$$CS)EA@V]3.jpg
├─$1
│  └─YG
│          $1YG{KX6NFF0R0WSDC0`[YM.png
├─$2
│  └─NP
│          $2NP~H2JMDOH]_C94DPF[OB.jpg
├─$3
│  └─%U
│          $3%U56VJ$2)PEFGX4EC8%WB.png
├─$6
│  ├─DM
│  │      $6DM)J~}]TTCM{TK9CCUP8K.png
│  └─O2
│          $6O27B4FV3A(_S%9O{W77U8.jpg
├─$7
│  ├─UZ
│  │      $7UZ_}PFN]C6_%K)7$2_D9G.png
│  └─`%
├─$9
│  └─%C
│          $9%CX`_YUOE{426{K_V]3N2.jpg
├─$A
│  ├─7Y
│  │      $A7Y5{_KHVAAH[BJ54741OC.jpg
│  └─P)
│          $AP)B[JO[K9]YV)2Q5(38G9.png
├─$B
│  └─VC
│          $BVCU`BQIAU)GF5`3KB(COE.png
├─$C
│  └─LV
│          $CLVTRJH47~0L]9CAO87T@K.jpg
├─$D
│  ├─B$
│  │      $DB$XIW`TR_45_O$5(R5]YR.png
│  ├─_8
│  │      $D_8N3B~FCXJ02QZ$J2{M~1.jpg
│  └─_Q
│          $D_Q3)8N]0~5T5G7SJS%L)7.jpg

到网上查了一下, 发现早就有人注意到了这个问题. PC版QQ清理空间时保留指定群聊图片的方法里面提到了一种方法, 基于火绒的文件监控获得图片的路径, 然后用python脚本删除. 但根据留言反馈, 新版本的火绒已经没有这个功能了, 可以用Process Monitor代替. 我试着下载了最新版, 在我的win-7老机器上无法使用, 无奈只得用了3.1064版本, 猜想这个版本兼容性应该不错.

启动Process Monitor后, 需要先建一个过滤器. 对于QQ, 我们可以使用PID. 从任务管理器中查看QQ进程的PID为6064

然后使用PID新建并添加一个过滤器

这时就可以监测到事件了. 由于我们只监测QQ的文件读取, 所以可以忽略其他事件, 这样监测日志文件会小很多. 将工具栏上的其他事件取消, 只保留监测文件系统活动,

操作后, 如果查看下过滤器, 可以看到其他事件被排除了

这样我们就建立好了QQ文件读存的监测器.

接下来打开QQ的消息管理器, 选择要清理图片的联系人或群, 右键导出消息记录, 使用默认格式即可.

导出完成后, 在Process Monitor中保存, 选择CSV格式, 得到了刚才操作的监测日志.

日志中记录了QQ的所有文件读存操作. 我们可以从中找到刚才导出消息时涉及到的图片. 但是如果手动操作多次还是很麻烦的, 所以我就写了个bash脚本, 读取监测日志, 将其中包含的图片移动到日志目录下的QQimg文件夹, 以方便查看并删除. 使用脚本时要将其中的【QQ图片路径】换为你自己的, 类似/C:\\Users\\【用户名】\\Documents\\Tencent Files\\【QQ号】\\Image/这种.

<table class="highlighttable"><th colspan="2" style="text-align:left">_QQimg.bsh</th><tr><td><div class="linenodiv" style="background-color: #f0f0f0; padding-right: 10px"><pre style="line-height:125%"> 1 2 3 4 5 6 7 8 9 10 11 12 13</pre></div></td><td class="code"><div class="highlight"><pre style="line-height:125%"><span></span>awk <span style="color: #BB4444">'</span> BEGIN<span style="color: #666666">{</span><span style="color: #B8860B">IGNORECASE</span><span style="color: #666666">=</span>1<span style="color: #666666">}</span> /【QQ图片路径】/<span style="color: #666666">{</span> split<span style="color: #666666">(</span><span style="color: #B8860B">$0</span>, arr, /<span style="color: #BB4444">","</span>/<span style="color: #666666">)</span> img<span style="color: #666666">[</span>arr<span style="color: #666666">[</span>5<span style="color: #666666">]]</span>++ <span style="color: #666666">}</span> END <span style="color: #666666">{</span> <span style="color: #AA22FF; font-weight: bold">for</span><span style="color: #666666">(</span>i in img<span style="color: #666666">)</span> <span style="color: #666666">{</span> print i system<span style="color: #666666">(</span><span style="color: #BB4444">"mv \47"</span>i<span style="color: #BB4444">"\47 ./QQimg"</span><span style="color: #666666">)</span> <span style="color: #666666">}</span> <span style="color: #666666">}</span> <span style="color: #BB4444">'</span> Logfile.CSV</pre></div> </td></tr></table>

脚本执行成功后, 就可以查看QQimg文件夹下的图片, 没有问题的话, 直接删除, 聊天记录中这些图片就无法看到了. 再将聊天记录删除, 就彻底清理好了.

第一次做的话, 步骤有点麻烦. 但如果你的QQ一直在线, 其PID是不会变的, 所以以后需要清理时候, 直接打开Process Monitor, 导出QQ聊天记录, 保存监测日志, 运行脚本, 删除图片即可. 虽然没有完全自动, 也不算太麻烦.

就这样吧.