前言

微信聊天记录备份是一个diy玩家必须面临的一个问题,笔者最近发现了一个优雅的方式能够快速,自动,定时备份微信聊天记录,只需手机root后使用termux以root身份执行cron任务即可

本文实现方法需要termux的root环境和一些linux知识,如果你对这些不太熟悉,可能需要看看我博客中的相关文章后再继续

所用函数(可复制添加到.zshrc中)

alias am="sudo /system/bin/am"
# 设置一些颜色输出
function red() {
    [ "$1" = "-n" ] && local nl=$1 && shift
    echo -e $nl "\033[31m\033[01m$1\033[0m$2"
    return 1
}

function green() {
    [ "$1" = "-n" ] && local nl=$1 && shift
    echo -e $nl "\033[32m\033[01m$1\033[0m$2"
}

function yellow() {
    [ "$1" = "-n" ] && local nl=$1 && shift
    echo -e $nl "\033[33m\033[01m$1\033[0m$2"
}

function blue() {
    [ "$1" = "-n" ] && local nl=$1 && shift
    echo -e $nl "\033[34m\033[01m$1\033[0m$2"
}

export p_wxbak="yourpasswd"
function wxbak() {
    mkdir -p /sdcard/1/bak
    time (
        sudo "cd /data/data/com.tencent.mm && 7z u -bb1 -p${p_wxbak} -mhe=on -m0=LZ4 -mx3 -mmt8 '-xr!*cache*' '-xr!*.*log' /sdcard/1/bak/wxbak.7z *"
    )
}

function wxres() {
    time (
        cd /sdcard
        file=$(find -name "wxbak.7z" 2>/dev/null | head -n 1)
        [ "$file" = "" ] && red "未找到备份文件" && exit 1
        blue "找到备份文件:"
        yellow "$file"
        blue "正在解压加密文件..."
        sudo "7z x -mmt8 -p${p_wxbak} -o/data/data/com.tencent.mm -aoa $file"
        wxuser=$(sudo "ls -ld /data/data/com.tencent.mm | cut -d' ' -f3")
        blue "权限配置中..."
        sudo chown -R $wxuser:$wxuser /data/data/com.tencent.mm
        blue "重启微信中..."
        am force-stop com.tencent.mm && am start -n com.tencent.mm/com.tencent.mm.ui.LauncherUI
        green done.
    )
}
注:termux中安装上述所需包命令为:
apt -y install p7zip cronie

这里直接压缩备份微信的数据目录,包含聊天记录,可根据需要自行更改。另外需要安装7z,可直接使用包管理器搜素安装,然后设置变量p_wxbak的值,该值为压缩备份文件的密码,加密后就可以上传到网盘了,推荐阿里云或123网盘。

恢复时会自动查找备份文件,如果你自定义了备份文件名,务必在恢复函数中也修改文件名。另外安卓是基于linux的,使用root权限解压后还需要设置微信数据文件夹的属主,不然微信会闪退(因为没有权限进入自己的数据文件夹了),即对应于上述恢复函数中最后两条指令。

将上述文件保存后并调用wxbak函数即可实现备份,termux中如果以普通用户启动crond,则退出termux后该进程会被杀掉(因为termux是它的父进程),导致定时备份失败。解决办法是以root身份执行crond,从下图可以看到我们以root身份执行crond后,其父进程变为了所有进程之父:init进程,此时除非手机关机或者内存不足等异常情况发生crond进程才会退出,我们可以愉快的把手机当成linux服务器使用了。。。如果你不会使用cron执行定时任务,可在我博客搜索crontab查看该文章即可。

2022-09-14T15:58:50.png

最后附上三丰所设置的定时任务,每天12.30和18.30执行备份(注意这里三丰的函数是放在~/.myrc文件中的):

30 12 * * * $(which zsh) -c "source ~/.myrc && wxbak" > ~/bak.log 2>&1
30 18 * * * $(which zsh) -c "source ~/.myrc && wxbak" > ~/bak.log 2>&1
最后修改:2023 年 10 月 15 日
如果觉得我的文章对你有用,请随意赞赏