Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Releases: YAWAsau/backup_script

202605182003: feat: 性能與穩定性大改進,新增功能與防呆

18 May 12:06

Choose a tag to compare

主選單循環:跑完非備份動作回選單,不用反覆重啟
工具版本記錄:啟動時寫入 log/tools_version.log,便於除錯
log 自動清理:conf 新增 log_max_size_mb,達上限自動清空
SMB 主機名:掃描局網時顯示主機名
WebDAV 404 自動探測:目標目錄不存在時,自動列出根目錄實際內容,方便找出名稱差異
WebDAV 失敗智能識別:WRONG_VERSION_NUMBER / DNS / SSL / 連線拒絕等錯誤都會給出具體建議
DNS 解析 fallback:部分 ARM curl 二進制 DNS 失敗時自動透過 --resolve 繞過,解決網盤連線
conf 防呆:URL scheme 跟 remote_type 不一致時直接報錯

主要 Bug 修復
mksh 全面相容:<<<、arr=()、arr+=() 等 bash 專屬語法全改檔案/字串拼接
versionCode 解析:split apk 多行導致版本號被覆蓋為 1,造成「已備份應用」反覆重備
單獨備份保留清單:從子目錄跑 backup.sh 不再覆蓋整個 appList.txt
WebDAV XML 解析:兼容有 D: 前綴 / 無前綴,兼容 busybox awk
WebDAV 下載完整性:遞迴掃描檔案不再丟失
整數溢位:大於 2GB 的數據不再被誤判為「太小」
appList 同名 app:刪除 1 後綴後重新生成不再產生一模一樣的條目
trap EXIT 上傳失效:選單循環下備份結束直接觸發上傳,不再依賴 trap
小米 libc 雜訊:用 command -v 預檢 magisk,避免不必要的二進制呼叫
🔧 內部重構
新增 helper:app_details_read、release_details_read、prepare_pkg
*_map、get_app_uid、jq_inplace、tar_compress_dir/glob、ts_inplace、_dns_resolve + curl wrapper 等,大幅減少重複代碼。

遠端備份功能

16 May 03:09

Choose a tag to compare

Changelog

從 GitHub 上一版到本次更新。本次主要新增完整的遠端備份與還原功能


🎉 重大新增功能

1. 遠端備份(WebDAV / SMB)

完整的遠端上傳系統,支援 WebDAV 和 SMB 兩種協議。

功能:

  • 備份完成自動上傳到 NAS / 雲端 / 區網電腦
  • 智能範圍上傳 — 只傳本次備份的 app,不是整個資料夾
  • 進度顯示與速度統計(每目錄完成印 完成 X% (12.5 MB/s))
  • 上傳總耗時統計
  • 失敗檔案累計處理,完整 log
  • HTTP code 顯示(WebDAV 401/403/404 等)
  • 「全部成功才刪本地」策略,任一失敗則本地全保留
  • 可設定 remote_keep_local=1 永遠保留本地檔案

conf 新增:

remote_type="webdav"    # 或 smb
remote_url="http://192.168.1.100:8080/dav/"
remote_user="user"
remote_pass="pass"
remote_keep_local="0"   # 1=上傳成功後保留本地, 0=刪除本地

遠端目錄結構:腳本自動在 remote_url 後加 Backup_${Compression_method}_${user}/ 一層,結構與本地完全鏡像,例如:

smb://NAS/Backup/
    Backup_zstd_0/
        8591遊戲交易/...
        Animeko/...
        wifi/wifi.json
        tools/
        start.sh
        restore_settings.conf

2. 遠端下載備份

從 NAS / 雲端下載完整備份回手機,可直接執行恢復。

流程:

  1. 主選單「列出遠端備份」→ 連線、檢查必要檔案(tools/、start.sh、restore_settings.conf 缺一報錯)→ 產生 appList_network.txt
  2. 編輯 appList_network.txt# 註解掉不要下載的 app
  3. 主選單「從遠端下載備份」→ 下載到 $MODDIR/Backup_zstd_X/
  4. start.sh 直接恢復,跟本地備份一樣

特性:

  • 固定 3 項(tools/ start.sh restore_settings.conf)自動下載,不需要列在清單
  • WebDAV 並行下載(4 路同時)
  • SMB 每個目錄一次連線批次傳輸
  • 完整 UTF-8 中文路徑支援
  • 下載總耗時統計

3. 連線測試入口(主選單第 6 項)

三層測試,獨立驗證遠端設定,不會觸發備份或上傳:

  • TCP 預檢 — 3 秒內探測 host:port 可達性
  • 認證測試 — 各協議對應方式驗證帳密
  • 路徑測試 — 嘗試列出遠端目標路徑

每層失敗有對應的精準錯誤(認證失敗 / share 不存在 / 路徑不存在等)。

4. 區網 SMB 主機掃描(scan_smb)

腳本啟動時自動掃描區網,列出所有開放 SMB 的主機與共享。50 個 IP 一批並行掃描,通常 5-10 秒完成。

本機 IP: 192.168.0.228
掃描 192.168.0.0/24 上的 SMB 主機 (445 port)...
  ...已掃描 50/254
  ...
發現 SMB: 192.168.0.205
  共享: ADMIN$
  共享: Backup
  共享: C$

5. 單獨上傳備份

兩個入口,讓你不用重新備份就能補傳:

  • 主選單第 7 項:讀 appList.txt + Custom_path,把現有本地備份的對應目錄全部上傳
  • 每個 app 子目錄自動生成 upload.sh:用 MT 管理器點某個 app 的 upload.sh,只上傳該 app

6. 啟動 Logo

腳本啟動時顯示 ASCII art logo (SPEED 字樣 + BACKUP/RESTORE/SYNC slogan,亮青配粉紅)。


🚀 效能優化

SMB 批次傳輸

  • 上傳:按遠端目錄分組,每組一次 smbclient 連線批次傳所有檔案(原本每檔重連)
  • 下載:每個目錄用 -D 參數一次連線傳完該目錄全部檔案

WebDAV 並行下載

  • 先遞迴 PROPFIND 掃出所有檔案 URL
  • 再用 curl -Z --parallel-max 4 並行下載,4 路同時
  • 小檔多時可省 50-75% 時間

共用 helper 函數

抽出 helper 消除重複代碼:

  • remote_parse_smb_url — SMB URL 解析(取代 4 處重複)
  • smb_filter_noise — smbclient 輸出過濾(取代 5 處重複)
  • dir_has_files — 目錄非空判斷(取代 3 處重複)
  • url_encode_path / url_decode_path — 完整 UTF-8 URL 編解碼

🐛 Bug 修復

強制 curl HTTP/1.1

某些 WebDAV 伺服器(openresty / nginx)在 curl 8.x 預設 HTTP/2 PUT 會回 404。所有 curl 呼叫加 --http1.1 強制使用 HTTP/1.1,跟 WebDAV 1999 年協議最相容。

WebDAV 中文路徑無法上傳

原本只處理 4 個 ASCII 字元(%20 %2B %23 %25),中文 app 名(UTF-8 多 byte)上傳失敗。新版用 od + awk 完整編碼,中文 / 空白 / 特殊字元全支援。

SMB 中文路徑失敗

SMB 上傳指令的中文路徑被單引號包住,實際 smbclient 解析時把引號當字面字元,導致 NT_STATUS_OBJECT_PATH_NOT_FOUND。修正為不加引號直接傳。

smbclient 找不到 smb.conf

自編 smbclient 寫死找 /usr/local/samba/etc/samba/smb.conf,Android 上沒這檔。加 -s /dev/null 跳過 config 讀取。

WebDAV 預建初始目錄

某些嚴格的 WebDAV 伺服器不會自動建中介目錄。新版上傳前先 MKCOL Backup_zstd_X/ 自己。

檔案 / 目錄顯示區分

原本根目錄檔案(start.shrestore_settings.conf)會被當作目錄顯示「上傳目錄」。改成判斷 rel 含 / 與否,根目錄檔案顯示「上傳檔案」。

失敗處理改進

  • 累積失敗清單,不再 break 終止後續
  • remote_keep_local=0 時改為「全部成功才刪除所有檔」
  • 失敗時本地全部保留(含已上傳的)

沒網路時不再卡住

  • smbclient 加 -t 10 命令 timeout
  • 事前 remote_precheck TCP 預檢(3 秒內判斷可達)
  • 失敗時停用上傳但保留本地備份

Trap EXIT 不誤觸發

原本任何選項退出都會觸發 remote_cleanup(連測試連線、列出備份這種非備份操作也會)。改用 REMOTE_TRIGGER 旗標,只有 backup / backup_media / backup_update_apk 成功完成才設旗標,其他操作不觸發上傳。

單獨上傳不重複跑

主動呼叫上傳完後清掉 REMOTE_TRIGGER,避免 trap EXIT 又跑一次。single_upload / upload_current_backup 不重複呼叫 remote_setup(啟動時已跑過)。

主選單支援多位數選項

case[1-9] 改成 [0-9]*,支援 10+ 項選單。


📋 conf 變更

新增遠端相關設定:

#色彩設定 (256 色 ANSI 編號)
#常用值: 39藍 51青 82綠 196紅 208橘 213粉 220黃 165紫
rgb_a="${rgb_a:-220}"   # 主色 (亮黃)
rgb_b="${rgb_b:-51}"    # 輔色1 (亮青)
rgb_c="${rgb_c:-213}"   # 輔色2 (粉紅)

#遠程備份類型 (留空不啟用)
#推薦 webdav (穩定)
#smb 僅支援 SMB1/CIFS,Windows Server 需手動開啟
remote_type="${remote_type:-}"

#遠程地址
#WebDAV例: http://192.168.1.100:8080/dav/
#SMB例:    smb://192.168.1.100/backup/
remote_url="${remote_url:-}"

remote_user="${remote_user:-}"
remote_pass="${remote_pass:-}"

#遠程備份完成後是否保留本地檔案
#1保留本地檔案(上傳後不刪除) 0上傳成功後刪除本地檔案
remote_keep_local="${remote_keep_local:-0}"

🎨 配色與可維護性

  • 統一配色方案:rgb_a=220 亮黃 / rgb_b=51 亮青 / rgb_c=213 粉紅,跟 logo 配色一致
  • 全腳本 40+ 函數補上中文注釋,提高可維護性
  • echoRgb 函數加完整色碼對照表注釋
  • conf 內 rgb 設定加常用色碼提示

📊 統計

  • 行數:2863 → 4348 行(+1485 行)
  • 主選單從 6 項擴充到 10 項
  • 新增遠端備份 / 下載 / 上傳 / 測試共 4 大模組
  • 完整 UTF-8 中文路徑支援

🆕 選單對照

# 舊版 新版
1 生成應用列表 生成應用列表
2 備份應用 備份應用
3 備份已更新應用 備份已更新應用
4 備份自定義資料夾 備份自定義資料夾
5 備份WiFi 備份WiFi
6 殺死運行中腳本 測試遠端連線
7 - 單獨上傳當前備份
8 - 列出遠端備份
9 - 從遠端下載備份
10 - 殺死運行中腳本

202508162209

16 Aug 14:32

Choose a tag to compare

修復restore_settimgs.conf user=不會跟隨使用者設定自動設置
classes.dex更新 現在支持wifi密碼備份恢復
更新後台應用獲取邏輯
更新應用pid獲取邏輯 可以更有效殺死目標應用
移除刷入模塊支持 腳本不應該處理模塊的領域 專注於應用備份
選單增加備份wifi與恢復wifi設置選項
更新邏輯優化
應用uid獲取方式效率優化,優先調用pm list packages 避免重複調用dex與多用戶設置失敗修復
修復while循環遭遇pm(cmd)輸出異常退出問題
優化了匹配包名邏輯 重複或類似包明現在可以更好的處理
修復了部分終端與不同設備遭遇的applist.txt提示的權限問題,更改了txt輸出方式與邏輯
修復已經移除應用被輸出備份問題
新增單獨恢復包含ssaid應用選項
更改了檢測應用是否存在邏輯
其他細節優化 現在備份恢復速度應該是加快了

202507071944

07 Jul 11:37

Choose a tag to compare

修復生成應用列表失敗
去除recovery下的備份模式 潛在族群太少,而且大部分設備已經沒有twrp可以使用

202507071542

07 Jul 07:47

Choose a tag to compare

調整環境變量優先級別
修復部分終端提示context權限的攔截問題
修復更新備份腳本後start.sh腳本錯誤與腳本創建失敗

此版本請勿使用自動更新,因為此前版本腳本存在問題,請手動解壓縮或是全新使用

@XayahSuSuSu 幫助修復了dex的幾個問題 當備份權限為空時不在提示錯誤

202507061817

06 Jul 10:18

Choose a tag to compare

將全部腳本整合為strst.sh 舊腳本將不在兼容
使用了5ec1cff 的cmd來解決部分設備提示cmd context問題
修復獲取資料夾使用者id失敗問題
修復部分終端內恢復split apk的異常終止問題
調整備份已更新應用功能的邏輯
zstd更新版本
細節優化

202504261629

26 Apr 08:37

Choose a tag to compare

更新cdn 上個版本假設你在腳本看到此更新訊息時請手動下載,因為上個版本cdn是壞的

202504260051

25 Apr 16:55

Choose a tag to compare

修復ksu用戶備份出現校驗失敗問題

修復部分用戶出現自動更新被關閉問題

修復ksu用戶顯示壓縮率異常

修復優化幾處問題

202504241535

24 Apr 07:55

Choose a tag to compare

修復當腳本異常終止時TMPDIR目錄沒被正確刪除

更新CDN地址
更新dex,機型目錄

備份權限時只有返回true or false時才會備份,防止錯誤被記錄在json

恢復uid時部分應用獲取uid失敗修復,並且修復了無論如何都會調用一次dex與即使dex調用成功仍然調用dumpsys造成效率低下問題

Json記錄了備份時間,供對比

修復了單獨恢復應用時腳本沒有正確設置ssaid的問題

修復單獨恢復腳本調用時仍然會恢復自定義資料夾問題

恢復資料夾內的Module資料夾現在支持刷入ksu模塊

輸出排除應用增加包名如下
com.android.soundrecorder
com.duokan.phone.remotecontroller
com.android.calendar
com.android.deskclock
com.android.calendar|com.android.deskclock

Md5:960e8a3472ab00f91946b27f8443ee1e
Sha256:a9e8c38317b6b69fa2fe0754ec734a7a6e2c30cfe921cb01852c99898f2f36b5

非本人tg QQ GitHub下載之壓縮包慎用

202501192040

19 Jan 12:55

Choose a tag to compare

更新dex 適配狀態欄通知 修復米米os2狀態欄通知

檢測應用是否包含keystore 如有擇提示風險

json紀錄備份時間

優化恢復時獲取應用uid效率與邏輯 防止重複調用app_process

優化關閉螢幕後的喚醒邏輯

備份恢復非user_id=0 解密其他用戶目錄(感謝群友測試與幫助)

選擇後台行腳本時狀態欄通知將通知進度

conf選擇螢幕關閉備份時狀態欄提示與播放音效(螢幕關閉會很焦慮到底備份好了沒有 有音效就可以知道腳本還在執行與否)

目前cdn異常 自動更新需要修改tools.sh
cdn=5才能使用