#!/usr/bin/env bash # 把 Pixel 上的运行时代码拉到本目录(只拉代码/配置,不拉 .db/日志/.env/.hermes_env.sh/缓存)。 # 手机是主版本,本目录是快照;用法: device/sync-device.sh [adb 路径] 然后 git diff / commit。 set -euo pipefail cd "$(dirname "$0")" ADB=${1:-../platform-tools/adb} REMOTE=/data/local/tmp/device-sync H=/data/data/com.termux/files/home "$ADB" shell "su -c 'mkdir -p $REMOTE; chmod 777 $REMOTE'" "$ADB" shell "su -c ' export PATH=/data/data/com.termux/files/usr/bin:/system/bin:\$PATH cd $H { find pixelphone wechat-viewer dsh .dsh/profiles .dsh/skills .termux/boot -type f \ \( -name \"*.py\" -o -name \"*.sh\" -o -name \"*.yml\" -o -name \"*.yaml\" -o -name \"*.cjs\" -o -name \"*.md\" -o -name \"*.html\" -o -name \"*.js\" -o -name \"*.css\" -o -name \"package.json\" -o -name \"start-*\" \) \ ! -path \"*/__pycache__/*\" ! -path \"*/node_modules/*\" ! -path \"*.flock-build*\" ! -name \"*.bak*\" ! -path \"*/_stage*\" ! -path \"*/_q/*\" \ ! -path \"*/logs/*\" ! -path \"*/cron-logs/*\" ! -path \"*/ocr_models/*\" ! -path \"*/backups/*\" ! -path \"*/digests/*\" ! -path \"*/tmp/*\" ! -path \"*/data/*\" \ ! -name \"_reply_result*\" ! -name \"article_*\" ! -name \"config.py\" ! -name \".secrets.env\" ! -name \".env\" ls /data/adb/service.d/*.sh 2>/dev/null } > $REMOTE/list.txt tar czf $REMOTE/device.tgz -T $REMOTE/list.txt 2>/dev/null su -g 10329 -G 3003 10329 -c \"crontab -l\" > $REMOTE/crontab.txt 2>/dev/null chmod -R a+r $REMOTE; wc -l $REMOTE/list.txt '" rm -rf _extract && mkdir _extract "$ADB" pull $REMOTE/device.tgz _extract/ >/dev/null "$ADB" pull $REMOTE/crontab.txt crontab.txt >/dev/null "$ADB" shell "su -c 'rm -rf $REMOTE'" # 重新生成:先清掉旧快照再解开,避免已删文件残留 find . -mindepth 1 -maxdepth 1 ! -name sync-device.sh ! -name _extract ! -name crontab.txt ! -name README.md -exec rm -rf {} + tar xzf _extract/device.tgz -C . 2>/dev/null || true # service.d 脚本带绝对路径解开在 data/adb/...,挪到 service.d/ if [ -d data/adb/service.d ]; then mv data/adb/service.d service.d; rm -rf data; fi rm -rf _extract # 兜底:扫一遍疑似密钥,命中就报警并中止(不留在工作区) if grep -rIlE '(sk-[A-Za-z0-9]{20,}|LTAI[A-Za-z0-9]{10,}|AccessKeySecret|api[_-]?key["'"'"' ]*[:=]["'"'"' ]*[A-Za-z0-9]{24,})' . --exclude=sync-device.sh --exclude=README.md 2>/dev/null; then echo "!! 上面文件疑似含密钥,请检查后再提交" >&2; exit 1 fi echo "ok: $(find . -type f ! -name sync-device.sh | wc -l) files"