From a1d912cabf4e419985c28af3efb8ed6aa07e0e59 Mon Sep 17 00:00:00 2001 From: Yawasau <229953100a@gmail.com> Date: Sun, 19 May 2024 18:29:09 +0800 Subject: [PATCH] bugfix --- backup_settings.conf | 9 +- tools/Device_List | 36 ++++-- tools/notification.dex | Bin 0 -> 22564 bytes tools/tools.sh | 246 +++++++++++++++++++++++++++++------------ 備份應用.sh | 10 +- 備份自定義資料夾.sh | 10 +- 生成應用列表.sh | 10 +- 7 files changed, 236 insertions(+), 85 deletions(-) create mode 100644 tools/notification.dex diff --git a/backup_settings.conf b/backup_settings.conf index e50e820..87b3d98 100644 --- a/backup_settings.conf +++ b/backup_settings.conf @@ -3,9 +3,12 @@ #0關閉音量鍵選擇 (如選項未設置,則強制使用音量鍵選擇) Lo=0 +#後台執行腳本(將無法看到當前壓縮速率,可完全關閉MT使用) +background_execution=0 + #腳本語言設置 留空則自動識別系統語言環境並翻譯 #1簡體中文 0繁體中文 -Shell_LANG=0 +Shell_LANG= #自定義備份文件輸出位置 支持相對路徑(留空則默認當前路徑) Output_path="" @@ -48,12 +51,12 @@ Custom_path=" /storage/emulated/0/Pictures/ /storage/emulated/0/Download/ /storage/emulated/0/Music -/storage/emulated/0/DCIM/ +/storage/emulated/0/DCIM /data/adb " #黑名單模式(1完全忽略,不備份 0僅備份安裝包,注意!此選項Backup_Mode=1時黑名單模式才能使用) -blacklist_mode=1 +blacklist_mode=0 #備份黑名單(備份策略由「黑名單模式」控制,此處只作為黑名單應用列表) blacklist=" diff --git a/tools/Device_List b/tools/Device_List index c9e7b53..f5be632 100644 --- a/tools/Device_List +++ b/tools/Device_List @@ -108,7 +108,7 @@ "2203121C" "Xiaomi 12S Ultra" "22071212AG" "Xiaomi 12T 國際版" "22081212UG" "Xiaomi 12T Pro 國際版" -"22200414R" "Xiaomi 12T Pro 日本版 (SIM Free)" +"22200414R" "Xiaomi 12T Pro 日本版 (無鎖)" "A201XM" "Xiaomi 12T Pro 日本版 (SoftBank)" "2211133C" "Xiaomi 13 國行版" "2211133G" "Xiaomi 13 國際版" @@ -118,10 +118,10 @@ "2304FPN6DG" "Xiaomi 13 Ultra 國際版" "2210129SG" "Xiaomi 13 Lite 國際版" "2306EPN60G" "Xiaomi 13T 國際版" -"2306EPN60R" "Xiaomi 13T 日本版 (SIM Free)" +"2306EPN60R" "Xiaomi 13T 日本版 (無鎖)" "XIG04" "Xiaomi 13T 日本版 (KDDI)" "23078PND5G" "Xiaomi 13T Pro 國際版" -"23088PND5R" "Xiaomi 13T Pro 日本版 (SIM Free)" +"23088PND5R" "Xiaomi 13T Pro 日本版 (無鎖)" "A301XM" "Xiaomi 13T Pro 日本版 (SoftBank)" "23127PN0CC" "Xiaomi 14 國行版" "23127PN0CG" "Xiaomi 14 國際版" @@ -129,6 +129,11 @@ "2311BPN23C" "Xiaomi 14 Pro 鈦金屬版 (衛星通訊)" "24031PN0DC" "Xiaomi 14 Ultra 國行版" "24030PN60G" "Xiaomi 14 Ultra 國際版" +"2406APNFAG" "Xiaomi 14T 國際版" +"XIG06" "Xiaomi 14T 日本版 (KDDI)" +"2407FPN8EG" "Xiaomi 14T Pro 國際版" +"2407FPN8ER" "Xiaomi 14T Pro 日本版 (無鎖)" +"A402XM" "Xiaomi 14T Pro 日本版 (SoftBank)" "2014616" "小米 Note 雙網通版" "2014619" "小米 Note 全網通版" "2014618" "小米 Note 移動合約版" @@ -160,6 +165,7 @@ "2106118C" "Xiaomi MIX 4" "22061218C" "Xiaomi MIX Fold 2" "2308CPXD0C" "Xiaomi MIX Fold 3" +"24072PX77C" "Xiaomi MIX Fold 4" "2016001" "小米 Max 標準版 全網通版" "2016002" "小米 Max 標準版 國際版" "2016007" "小米 Max 高配版" @@ -331,7 +337,7 @@ "23053RN02Y" "Redmi 12 國際版 (NFC)" "23077RABDC" "Redmi 12 5G 國行版" "23076RN8DY" "Redmi 12 5G 國際版 (NFC)" -"23076RA4BR" "Redmi 12 5G 日本版 (SIM Free)" +"23076RA4BR" "Redmi 12 5G 日本版 (無鎖)" "XIG03" "Redmi 12 5G 日本版 (KDDI)" "A401XM" "Redmi 12 5G 日本版 (SoftBank)" "23076RN4BI" "Redmi 12 5G 印度版" @@ -341,6 +347,12 @@ "22120RN86I" "Redmi 12C 印度版" "2212ARNC4L" "Redmi 12C 拉美版" "22126RN91Y" "Redmi 12C 國際版 (NFC)" +"2404ARN45A" "Redmi 13 國際版" +"2404ARN45I" "Redmi 13 印度版" +"24049RN28L" "Redmi 13 拉美版" +"24040RN64Y" "Redmi 13 國際版 (NFC)" +"2406ERN9CC" "Redmi 13 5G 國行版" +"2406ERN9CI" "Redmi 13 5G 印度版" "23106RN0DA" "Redmi 13C 國際版" "2311DRN14I" "Redmi 13C 印度版" "23100RN82L" "Redmi 13C 拉美版" @@ -435,7 +447,7 @@ "M2103K19G" "Redmi Note 10 5G 國際版" "M2103K19Y" "Redmi Note 10T 國際版" "XIG02" "Redmi Note 10 JE 日本版 (KDDI)" -"22021119KR" "Redmi Note 10T 日本版 (SIM Free)" +"22021119KR" "Redmi Note 10T 日本版 (無鎖)" "A101XM" "Redmi Note 10T 日本版 (SoftBank)" "M2101K6G" "Redmi Note 10 Pro 國際版" "M2101K6T" "Redmi Note 10 Pro 泰國版" @@ -505,6 +517,7 @@ "23090RA98C" "Redmi Note 13 Pro+ 國行版" "23090RA98G" "Redmi Note 13 Pro+ 5G 國際版" "23090RA98I" "Redmi Note 13 Pro+ 5G 印度版" +"24040RA98R" "Redmi Note 13 Pro+ 5G 日本版" "2311FRAFDC" "Redmi Note 13R Pro" "M2004J7AC" "Redmi 10X 5G" "M2004J7BC" "Redmi 10X Pro 5G" @@ -542,6 +555,7 @@ "23113RKC6C" "Redmi K70" "23117RK66C" "Redmi K70 Pro" "2311DRK48C" "Redmi K70E" +"2407FRK8EC" "Redmi K70 至尊版" "2016020" "紅米 Pro 標準版" "2016021" "紅米 Pro 高配版 / 尊享版" "M1803E6E" "紅米 S2 全網通版" @@ -560,6 +574,7 @@ "220743FI" "Redmi A1+ 印度版" "23028RN4DG" "Redmi A2 國際版" "23028RN4DI" "Redmi A2 印度版" +"23026RN54G" "Redmi A2 拉美版" "23028RNCAG" "Redmi A2+ 國際版" "23028RNCAI" "Redmi A2+ 印度版" "23129RN51X" "Redmi A3 國際版" @@ -570,6 +585,10 @@ "23073RPBFC" "Redmi Pad SE 國行版" "23073RPBFG" "Redmi Pad SE 國際版" "23073RPBFL" "Redmi Pad SE 拉美版" +"2405CRPFDC" "Redmi Pad Pro 國行版" +"2405CRPFDG" "Redmi Pad Pro 國際版" +"24074RPD2C" "Redmi Pad Pro 5G 國行版" +"24074RPD2G" "Redmi Pad Pro 5G 國際版" "M1805E10A" "POCO F1" "M2004J11G" "POCO F2 Pro 國際版" "M2012K11AG" "POCO F3 國際版" @@ -621,6 +640,8 @@ "22071219CG" "POCO M5 國際版" "22071219CI" "POCO M5 印度版" "2207117BPG" "POCO M5s 國際版" +"2404APC5FG" "POCO M6 國際版" +"2404APC5FI" "POCO M6 印度版" "23128PC33I" "POCO M6 5G 印度版" "2312FPCA6G" "POCO M6 Pro 國際版" "23076PC4BI" "POCO M6 Pro 5G 印度版" @@ -636,6 +657,7 @@ "2312BPC51H" "POCO C61 印度版" "2310FPCA4G" "POCO C65 國際版" "2310FPCA4I" "POCO C65 印度版" +"2405CPCFBG" "POCO Pad 國際版" "FYJ01QP" "小米米家翻譯機" "21051191C" "CyberDog 仿生四足機器人" "GT-I9000" "Galaxy S 公開版" @@ -794,6 +816,7 @@ "SM-C7108" "Galaxy C8 4G+" "SM-C9000" "Galaxy C9 Pro 全網通版" "SM-C9008" "Galaxy C9 Pro 4G+" +"SM-C5560" "Galaxy C55 5G" "SM-J3109" "Galaxy J3 電信定制版" "SM-J5008" "Galaxy J5 移動定制版" "SM-J7008" "Galaxy J7 移動定制版" @@ -1378,8 +1401,7 @@ "A063" "Nothing Phone (1)" "A065" "Nothing Phone (2) Global" "AIN065" "Nothing Phone (2) India" -"A142" "Nothing Phone (2a) Global" -"AIN142" "Nothing Phone (2a) India" +"A142" "Nothing Phone (2a)" "NX501" "nubia Z5" "NX402" "nubia Z5 mini" "NX503J" "nubia Z5S" diff --git a/tools/notification.dex b/tools/notification.dex new file mode 100644 index 0000000000000000000000000000000000000000..efa38e3a1521a5cdbaab0c59579829b51143cd3c GIT binary patch literal 22564 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%0AdI-NdO2FS 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 W{#{-nukXIUc91VJDu@29-~Ry>ogoAO literal 0 HcmV?d00001 diff --git a/tools/tools.sh b/tools/tools.sh index d2e4027..df3574a 100644 --- a/tools/tools.sh +++ b/tools/tools.sh @@ -14,6 +14,9 @@ update_backup_settings_conf() { #0關閉音量鍵選擇 (如選項未設置,則強制使用音量鍵選擇) Lo="${Lo:-0}" +#後台執行腳本(將無法看到當前壓縮速率,可完全關閉MT使用) +background_execution=0 + #腳本語言設置 留空則自動識別系統語言環境並翻譯 #1簡體中文 0繁體中文 Shell_LANG="$Shell_LANG" @@ -135,6 +138,9 @@ update_Restore_settings_conf() { #0關閉音量鍵選擇(如選項未設置,則強制使用音量鍵選擇) Lo="${Lo:-0}" +#後台執行腳本(將無法看到當前壓縮速率,可完全關閉MT使用) +background_execution=0 + #腳本語言設置 為空自動針對當前系統語言環境自動翻譯 #1簡體中文 0繁體中文 Shell_LANG="$Shell_LANG" @@ -296,7 +302,7 @@ fi [[ ! -f $filepath/zstd ]] && echoRgb "$filepath缺少zstd" && exit 2 export PATH="$filepath:$PATH" export TZ=Asia/Taipei -export CLASSPATH="$tools_path/classes.dex:$tools_path/classes2.dex" +export CLASSPATH="$tools_path/classes.dex:$tools_path/classes2.dex:$tools_path/notification.dex" zstd_sha256sum="55cc57a3d079dd90e74d972c705c4f9389dd00a7175de148e21000eab01f7ed9" tar_sha256sum="3c605b1e9eb8283555225dcad4a3bf1777ae39c5f19a2c8b8943140fd7555814" classesdex_sha256sum="09d0058763157b97d6ea2bf74bd7ec53089a9ddb496f089a159ea0027007bb94" @@ -319,6 +325,12 @@ fi alias appinfo="app_process /system/bin --nice-name=appinfo han.core.order.AppInfo $@" alias down="app_process /system/bin --nice-name=down han.core.order.Down $@" alias PayloadDumper="app_process /system/bin --nice-name=payload-dumper han.core.order.payload.PayloadDumper $@" +echo $notification +if [[ $notification = true ]]; then + alias notification="app_process /system/bin io.github.qqlittleice233.magic.Notification -send --importance=3 $@" +else + alias notification="&>/dev/null" +fi case $LANG in *CN* | *cn*) alias ts="app_process /system/bin --nice-name=appinfo han.core.order.ChineseConverter -s $@" ;; @@ -340,7 +352,7 @@ endtime() { esac endtime="$(date -u "+%s")" duration="$(echo $((endtime - starttime)) | awk '{t=split("60 秒 60 分 24 時 999 天",a);for(n=1;n/dev/null)\n -型號:$Device_name($(getprop ro.product.device 2>/dev/null))\n -閃存顆粒:$UFS_MODEL($ROM_TYPE)\n -$DEVICE_NAME\n -$RAMINFO\n -Android版本:$(getprop ro.build.version.release 2>/dev/null) SDK:$(getprop ro.build.version.sdk 2>/dev/null)\n -By@YAWAsau\n -Support: https://jq.qq.com/?_wv=1027&k=f5clPNC3" +echoRgb "腳本路徑:$MODDIR\n -已開機:$(Show_boottime)\n -執行時間:$(date +"%Y-%m-%d %H:%M:%S")\n -busybox路徑:$(which busybox)\n -busybox版本:$(busybox | head -1 | awk '{print $2}')\n -appinfo版本:$(appinfo --version)\n -腳本版本:$backup_version\n -管理器:$Manager_version\n -品牌:$(getprop ro.product.brand 2>/dev/null)\n -型號:$Device_name($(getprop ro.product.device 2>/dev/null))\n -閃存顆粒:$UFS_MODEL($ROM_TYPE)\n -$DEVICE_NAME\n -$RAMINFO\n -Android版本:$(getprop ro.build.version.release 2>/dev/null) SDK:$(getprop ro.build.version.sdk 2>/dev/null)\n -內核:$(uname -r)\n -By@YAWAsau\n -Support: https://jq.qq.com/?_wv=1027&k=f5clPNC3" case $MODDIR in *Backup_*) if [[ -f $MODDIR/app_details.json ]]; then @@ -559,7 +572,7 @@ Rename_script () { if [[ $Script_target_language != $shell_language ]]; then [[ $HT = 0 && $K = "" ]] && echoRgb "腳本語言為$shell_language....轉換為$Script_target_language中,請稍後等待轉換...." ts -f "$REPLY" -o "$REPLY" - echo_log "$REPLY翻譯" + echo_log "$REPLY翻譯" "SpeedBackup" mv "$REPLY" "$MODDIR_NAME/$(ts "$FILE_NAME")" fi fi @@ -569,7 +582,7 @@ Rename_script () { if [[ $Script_target_language != $shell_language ]]; then [[ $HT = 0 && $K = "" ]] && echoRgb "腳本語言為$shell_language....轉換為$Script_target_language中,請稍後等待轉換...." ts -f "$REPLY" -o "$REPLY" - echo_log "$REPLY翻譯" + echo_log "$REPLY翻譯" "SpeedBackup" mv "$REPLY" "$MODDIR_NAME/$(ts "$FILE_NAME")" let HT++ fi ;; @@ -595,9 +608,41 @@ touch_shell () { Restore|convert|dumpname|Restore3|check_file) conf_path='${0%/*}/restore_settings.conf' ;; esac if [[ $4 != "" ]]; then - [[ $Output_path = "" ]] && echo "if [ -f \"$MODDIR_Path/tools/tools.sh\" ]; then\n MODDIR=\"$MODDIR_Path\"\n operate=\"$1\"\n $4\n conf_path=\"$conf_path\"\n . \"$MODDIR_Path/tools/tools.sh\" | tee \"\${0%/*}/log.txt\"\nelse\n echo \"$MODDIR_Path/tools/tools.sh遺失\"\nfi" >"$2" + [[ $Output_path = "" ]] && echo "if [ -f \"$MODDIR_Path/tools/tools.sh\" ]; then + MODDIR=\"$MODDIR_Path\" + operate=\"$1\" + $4 + conf_path=\"$conf_path\" + if [ \"\$(grep -o 'background_execution=.*' \"\$conf_path\" | awk -F '=' '{print \$2}')\" = 1 ]; then + { + notification=true + . \"$MODDIR_Path/tools/tools.sh\" | tee \"\${0%/*}/log.txt\" + } & else - echo "[ \"\$(echo \"\${0%/*}\" | grep -o 'bin.mt.plus/temp')\" != \"\" ] && echo \"你媽沒告訴你腳本要解壓縮嗎?傻逼玩兒\" && exit 2\nif [ -f \"$MODDIR_Path/tools/tools.sh\" ]; then\n MODDIR=\"\${0%/*}\"\n operate=\"$1\"\n conf_path=\"$conf_path\"\n . \"$MODDIR_Path/tools/tools.sh\" | tee \"\$MODDIR/log.txt\"\nelse\n echo \"$MODDIR_Path/tools/tools.sh遺失\"\nfi" >"$2" + notification=false + . \"$MODDIR_Path/tools/tools.sh\" | tee \"\${0%/*}/log.txt\" + fi +else + echo \"$MODDIR_Path/tools/tools.sh遺失\" +fi" >"$2" + else + echo "[ \"\$(echo \"\${0%/*}\" | grep -o 'bin.mt.plus/temp')\" != \"\" ] && echo \"你媽沒告訴你腳本要解壓縮嗎?傻逼玩兒\" && exit 2 +if [ -f \"$MODDIR_Path/tools/tools.sh\" ]; then + MODDIR=\"\${0%/*}\" + operate=\"$1\" + conf_path=\"$conf_path\" + if [ \"\$(grep -o 'background_execution=.*' \"\$conf_path\" | awk -F '=' '{print \$2}')\" = 1 ]; then + { + notification=true + . \"$MODDIR_Path/tools/tools.sh\" | tee \"\${0%/*}/log.txt\" + } & + else + notification=false + . \"$MODDIR_Path/tools/tools.sh\" | tee \"\${0%/*}/log.txt\" + fi +else + echo \"$MODDIR_Path/tools/tools.sh遺失\" +fi" >"$2" fi } update_script() { @@ -625,25 +670,25 @@ update_script() { zipFile="$path_hierarchy/${zipFile##*/}" rm -rf "$path_hierarchy/tools" unzip -o "$zipFile" tools/* -d "$path_hierarchy" | sed 's/inflating/釋放/g ; s/creating/創建/g ; s/Archive/解壓縮/g' - echo_log "解壓縮${zipFile##*/}" + echo_log "解壓縮${zipFile##*/}" "SpeedBackup" if [[ $result = 0 ]]; then if [[ $shell_language != $Script_target_language ]]; then echoRgb "腳本語言為$shell_language....轉換為$Script_target_language中,請稍後等待轉換...." ts -f "$path_hierarchy/tools/Device_List" -o "$path_hierarchy/tools/Device_List" - echo_log "$path_hierarchy/tools/Device_List翻譯" + echo_log "$path_hierarchy/tools/Device_List翻譯" "SpeedBackup" ts -f "$path_hierarchy/tools/tools.sh" -o "$path_hierarchy/tools/tools.sh" && sed -i "s/shell_language=\"$shell_language\"/shell_language=\"$Script_target_language\"/g" "$path_hierarchy/tools/tools.sh" - echo_log "$path_hierarchy/tools/tools.sh翻譯" + echo_log "$path_hierarchy/tools/tools.sh翻譯" "SpeedBackup" HT=1 fi update_backup_settings_conf>"$path_hierarchy/backup_settings.conf" ts -f "$path_hierarchy/backup_settings.conf" -o "$path_hierarchy/backup_settings.conf" - echo_log "$path_hierarchy/backup_settings.conf" + echo_log "$path_hierarchy/backup_settings.conf翻譯" "SpeedBackup" if [[ -d $find_tools_path && $find_tools_path != $path_hierarchy/tools ]]; then rm -rf "$find_tools_path" cp -r "$path_hierarchy/tools" "${find_tools_path%/*}" update_Restore_settings_conf>"${find_tools_path%/*}/restore_settings.conf" ts -f "${find_tools_path%/*}/restore_settings.conf" -o "${find_tools_path%/*}/restore_settings.conf" - echo_log "${find_tools_path%/*}/restore_settings.conf翻譯" + echo_log "${find_tools_path%/*}/restore_settings.conf翻譯" "SpeedBackup" fi Rename_script if [[ $Output_path != "" ]]; then @@ -726,22 +771,22 @@ if [[ $path_hierarchy != "" && $Script_target_language != "" ]]; then ts -f "$REPLY" -o "$REPLY" if [[ $? = 0 ]]; then touch "$TMPDIR/0" - echo_log "$REPLY翻譯" + echo_log "$REPLY翻譯" "SpeedBackup" MODDIR="${0%/*}" if [[ $REPLY != *Backup_* ]]; then update_backup_settings_conf>"${REPLY%/*/*}/backup_settings.conf" ts -f "${REPLY%/*/*}/backup_settings.conf" -o "${REPLY%/*/*}/backup_settings.conf" - echo_log "${REPLY%/*/*}/backup_settings.conf翻譯" + echo_log "${REPLY%/*/*}/backup_settings.conf翻譯" "SpeedBackup" else if [[ $REPLY = *Backup_* ]]; then update_Restore_settings_conf>"${REPLY%/*/*}/restore_settings.conf" ts -f "${REPLY%/*/*}/restore_settings.conf" -o "${REPLY%/*/*}/restore_settings.conf" - echo_log "${REPLY%/*/*}/restore_settings.conf翻譯" + echo_log "${REPLY%/*/*}/restore_settings.conf翻譯" "SpeedBackup" fi fi sed -i "s/shell_language=\"$shell_language\"/shell_language=\"$Script_target_language\"/g" "$REPLY" ts -f "${REPLY%/*}/Device_List" -o "${REPLY%/*}/Device_List" - echo_log "${REPLY%/*}/Device_List翻譯" + echo_log "${REPLY%/*}/Device_List翻譯" "SpeedBackup" [[ $K = 1 ]] && Rename_script else echoRgb "$REPLY ts進程出現錯誤" "0" @@ -969,7 +1014,7 @@ Backup_apk() { zstd | Zstd | ZSTD) tar --checkpoint-action="ttyout=%T\r" -cf - *.apk | zstd --ultra -"$Compression_rate" -T0 -q --priority=rt >"$Backup_folder/apk.tar.zst" ;; esac ) - echo_log "備份$apk_number個Apk" + echo_log "備份$apk_number個Apk" "SpeedBackup" "$name1" if [[ $result = 0 ]]; then Validation_file "$Backup_folder/apk.tar"* if [[ $result = 0 ]]; then @@ -1029,36 +1074,36 @@ Backup_data() { if [[ -d $data_path ]]; then unset Filesize m_size k_size get_size ssaid Get_Permissions result Filesize="$(du -s "$data_path" | awk '{print $1}')" - k_size="$(awk 'BEGIN{printf "%.2f\n", "'$Filesize'"'*1024'/'1024'}')" - m_size="$(awk 'BEGIN{printf "%.2f\n", "'$k_size'"/'1024'}')" - if [[ $(expr "$m_size" \> 1) -eq 0 ]]; then - get_size="$(awk 'BEGIN{printf "%.2f\n", "'$k_size'"/'1024'}')KB" - else - [[ $(echo "$m_size" | cut -d '.' -f1) -lt 1000 ]] && get_size="${m_size}MB" || get_size="$(awk 'BEGIN{printf "%.2f\n", "'$m_size'"/'1024'}')GB" - fi - case $1 in - user) - Ssaid="$(jq -r '.[] | select(.Ssaid != null).Ssaid' "$app_details")" - ssaid="$(get_ssaid "$name2")" - echoRgb "SSAID:$(get_ssaid "$name2")" - if [[ $ssaid != null && $ssaid != $Ssaid ]]; then - SSAID_apk="$(echo "$name1 \"$name2\"")" - SSAID_apk2="$(echo "$SSAID_apk\n$SSAID_apk2")" - jq -c --arg entry "$name1" --arg new_value "$ssaid" '.[$entry].Ssaid |= $new_value' "$app_details" > temp.json && mv temp.json "$app_details" - echo_log "備份ssaid" - fi - [[ $ssaid = null ]] && ssaid= - Get_Permissions="$(get_Permissions "$name2")" - if [[ $Get_Permissions != "" ]]; then - if [[ $Permissions = "" ]]; then - echo "Permissions=\"$Get_Permissions\"">"$app_Permissions" - echo_log "備份權限" - else - [[ $Permissions != $Get_Permissions ]] && echo "Permissions=\"$Get_Permissions\"">"$app_Permissions" && echo_log "備份權限" - fi - fi ;; - esac if [[ $Size != $Filesize ]]; then + k_size="$(awk 'BEGIN{printf "%.2f\n", "'$Filesize'"'*1024'/'1024'}')" + m_size="$(awk 'BEGIN{printf "%.2f\n", "'$k_size'"/'1024'}')" + if [[ $(expr "$m_size" \> 1) -eq 0 ]]; then + get_size="$(awk 'BEGIN{printf "%.2f\n", "'$k_size'"/'1024'}')KB" + else + [[ $(echo "$m_size" | cut -d '.' -f1) -lt 1000 ]] && get_size="${m_size}MB" || get_size="$(awk 'BEGIN{printf "%.2f\n", "'$m_size'"/'1024'}')GB" + fi + if [[ $1 = user ]]; then + Ssaid="$(jq -r '.[] | select(.Ssaid != null).Ssaid' "$app_details")" + ssaid="$(get_ssaid "$name2")" + echoRgb "SSAID:$(get_ssaid "$name2")" + if [[ $ssaid != null && $ssaid != $Ssaid ]]; then + echoRgb "$Ssaid>$ssaid" + SSAID_apk="$(echo "$name1 \"$name2\"")" + SSAID_apk2="$(echo "$SSAID_apk\n$SSAID_apk2")" + jq -c --arg entry "$name1" --arg new_value "$ssaid" '.[$entry].Ssaid |= $new_value' "$app_details" > temp.json && mv temp.json "$app_details" + echo_log "備份ssaid" "備份" "$name1" + fi + [[ $ssaid = null ]] && ssaid= + Get_Permissions="$(get_Permissions "$name2")" + if [[ $Get_Permissions != "" ]]; then + if [[ $Permissions = "" ]]; then + echo "Permissions=\"$Get_Permissions\"">"$app_Permissions" + echo_log "備份權限" "備份" "$name1" + else + [[ $Permissions != $Get_Permissions ]] && echo "Permissions=\"$Get_Permissions\"">"$app_Permissions" && echo_log "備份權限" "備份" "$name1" + fi + fi + fi #停止應用 case $1 in user|data|obb) kill_app ;; @@ -1079,7 +1124,7 @@ Backup_data() { esac ;; esac - echo_log "備份$1數據" + echo_log "備份$1數據" "備份" "$name1" if [[ $result = 0 ]]; then Validation_file "$Backup_folder/$1.tar"* if [[ $result = 0 ]]; then @@ -1098,7 +1143,7 @@ Backup_data() { \"PackageName\": \"$name2\", \"apk_version\": \"$apk_version2\", \"versionName\": \"$apk_version3\", - \"Ssaid\": \"$ssaid\" + \"Ssaid\": \"$(jq -r '.[] | select(.Ssaid != null).Ssaid' "$app_details")\" }, \"$1\": { \"Size\": \"$Filesize\" @@ -1145,7 +1190,7 @@ Release_data() { *) if [[ $A != "" ]]; then if [[ ${MODDIR_NAME##*/} = Media ]]; then - FILE_PATH="$(jq -r --arg entry "${FILE_NAME2}" 'select(.[$entry].path != null).path | .[$entry].path' "$app_details")" + FILE_PATH="$(jq -r --arg entry "${FILE_NAME2}" 'select(.[$entry].path != null).[$entry].path' "$app_details")" if [[ $FILE_PATH = "" ]]; then echoRgb "路徑獲取失敗" "0" else @@ -1168,7 +1213,7 @@ Release_data() { else Set_back_1 fi - echo_log "解壓縮${FILE_NAME##*.}" + echo_log "解壓縮${FILE_NAME##*.}" "恢復" "$name1" if [[ $result = 0 ]]; then case $FILE_NAME2 in user|data|obb) @@ -1196,9 +1241,9 @@ Release_data() { if [[ $FILE_NAME2 = user ]]; then echoRgb "路徑:$X" chown -hR "$uid" "$X/" - echo_log "設置用戶組:$(ls -ld "$X" | awk '{print $3,$4}'),shell in :$uid" + echo_log "設置用戶組:$(ls -ld "$X" | awk '{print $3,$4}'),shell in :$uid" "恢復" "$name1" chcon -hR "$Selinux_state" "$X/" 2>/dev/null - echo_log "selinux上下文設置" + echo_log "selinux上下文設置" "恢復" "$name1" elif [[ $FILE_NAME2 = data || $FILE_NAME2 = obb ]]; then chown -hR "$uid" "$FILE_PATH/$name2/" chcon -hR "$Selinux_state" "$FILE_PATH/$name2/" 2>/dev/null @@ -1212,11 +1257,11 @@ Release_data() { ;; thanox) restorecon -RF "$(find "/data/system" -name "thanos*" -maxdepth 1 -type d 2>/dev/null)/" 2>/dev/null - echo_log "selinux上下文設置" && echoRgb "警告 thanox配置恢復後務必重啟\n -否則不生效" "0" + echo_log "selinux上下文設置" "恢復" "$name1" && echoRgb "警告 thanox配置恢復後務必重啟\n -否則不生效" "0" ;; storage-isolation) restorecon -RF "/data/adb/storage-isolation/" 2>/dev/null - echo_log "selinux上下文設置" + echo_log "selinux上下文設置" "恢復" "$name1" ;; esac fi @@ -1240,7 +1285,7 @@ installapk() { Set_back_1 ;; esac - echo_log "${apkfile##*/}解壓縮" && [[ -f $Backup_folder/nmsl.apk ]] && cp -r "$Backup_folder/nmsl.apk" "$TMPDIR" + echo_log "${apkfile##*/}解壓縮" "恢復" "$name1" && [[ -f $Backup_folder/nmsl.apk ]] && cp -r "$Backup_folder/nmsl.apk" "$TMPDIR" else echoRgb "你的Apk壓縮包離家出走了,可能備份後移動過程遺失了\n -解決辦法手動安裝Apk後再執行恢復腳本" "0" fi @@ -1249,7 +1294,7 @@ installapk() { 1) echoRgb "恢復普通apk" "2" INSTALL "$TMPDIR"/*.apk - echo_log "Apk安裝" + echo_log "Apk安裝" "恢復" "$name1" ;; 0) echoRgb "$TMPDIR中沒有apk" "0" @@ -1259,14 +1304,14 @@ installapk() { b="$(create 2>/dev/null | egrep -o '[0-9]+')" if [[ -f $TMPDIR/nmsl.apk ]]; then INSTALL "$TMPDIR/nmsl.apk" - echo_log "nmsl.apk安裝" + echo_log "nmsl.apk安裝" "恢復" "$name1" fi find "$TMPDIR" -maxdepth 1 -name "*.apk" -type f 2>/dev/null | grep -v 'nmsl.apk' | while read; do pm install-write "$b" "${REPLY##*/}" "$REPLY" &>/dev/null - echo_log "${REPLY##*/}安裝" + echo_log "${REPLY##*/}安裝" "恢復" "$name1" done pm install-commit "$b" &>/dev/null - echo_log "split Apk安裝" + echo_log "split Apk安裝" "恢復" "$name1" ;; esac fi @@ -1288,12 +1333,15 @@ disable_verify() { get_name(){ txt="$MODDIR/appList.txt" txt2="$MODDIR/mediaList.txt" + txt3="$MODDIR/temp.txt" txt="${txt/'/storage/emulated/'/'/data/media/'}" if [[ $1 = Apkname ]]; then rm -rf "$txt" "$txt2" echoRgb "列出全部資料夾內應用名與自定義目錄壓縮包名稱" "3" fi rgb_a=118 + user="$(echo "${0%}" | sed 's/.*\/Backup_zstd_\([0-9]*\).*/\1/')" + [[ ! -f $txt3 ]] && { find "$MODDIR" -maxdepth 2 -name "apk.*" -type f 2>/dev/null | sort | while read; do Folder="${REPLY%/*}" [[ $rgb_a -ge 229 ]] && rgb_a=118 @@ -1337,7 +1385,7 @@ get_name(){ Set_back_1 ;; esac - echo_log "${REPLY##*/}解壓縮" + echo_log "${REPLY##*/}解壓縮" "恢復" "$name1" if [[ $result = 0 ]]; then if [[ -f $TMPDIR/base.apk ]]; then DUMPAPK="$(appinfo -d " " -o anwb,pn -f "$TMPDIR/base.apk")" @@ -1353,6 +1401,9 @@ get_name(){ fi fi if [[ $PackageName != "" && $ChineseName != "" ]]; then + if [[ $(pm list packages --user "$user" "$PackageName" 2>/dev/null | cut -f2 -d ':') = "" ]]; then + echo "$ChineseName $PackageName">>"$txt3" + fi case $1 in Apkname) [[ -f $Folder/${PackageName}.sh ]] && rm -rf "$Folder/${PackageName}.sh" @@ -1377,6 +1428,31 @@ get_name(){ done echoRgb "$txt2重新生成" "1" fi + } + if [[ -f $txt3 ]]; then + if [[ $(grep -v "#" "$txt3" 2>/dev/null | sed -e '/^$/d' | sed -n '$=') != "" ]]; then + echoRgb "列出需要刪除的應用中....\n -$(cat "$txt3")" + echoRgb "確認列表無誤後音量上刪除,音量下退出腳本編輯列表" "2" + get_version "刪除" "退出腳本" && Delete_App="$branch" + if [[ $Delete_App = true ]]; then + i=1 + r="$(grep -v "#" "$txt3" 2>/dev/null | sed -e '/^$/d' | sed -n '$=')" + while [[ $i -le $r ]]; do + name1="$(grep -v "#" "$txt3" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')" + name2="$(grep -v "#" "$txt3" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')" + Backup_folder="$MODDIR/$name1" + [[ -d $Backup_folder ]] && rm -rf "$Backup_folder" + let i++ + done + rm -rf "$txt3" + else + rm -rf "$txt3" + exit 0 + fi + else + rm -rf "$txt3" + fi + fi exit 0 } self_test() { @@ -1393,7 +1469,7 @@ Validation_file() { zst) zstd -t "$1" 2>/dev/null ;; tar) tar -tf "$1" &>/dev/null ;; esac - echo_log "效驗" + echo_log "效驗" "效驗壓縮檔" } Check_archive() { starttime1="$(date -u "+%s")" @@ -1424,12 +1500,12 @@ Set_screen_pause_seconds () { Get_dark_screen_seconds="$(settings get system screen_off_timeout)" #設置30分鐘後息屏 settings put system screen_off_timeout 1800000 - echo_log "設置無操作息屏時間30分鐘" + echo_log "設置無操作息屏時間30分鐘" "SpeedBackup" fi elif [[ $1 = off ]]; then if [[ $Get_dark_screen_seconds != "" ]]; then settings put system screen_off_timeout "$Get_dark_screen_seconds" - echo_log "設置無操作息屏時間為$Get_dark_screen_seconds" + echo_log "設置無操作息屏時間為$Get_dark_screen_seconds" "SpeedBackup" fi fi } @@ -1596,8 +1672,6 @@ backup) restore_freeze #開始循環$txt內的資料進行備份 #記錄開始時間 - starttime1="$(date -u "+%s")" - TIME="$starttime1" en=118 echo "$script">"$TMPDIR/scriptTMP" && echo "$script">"$TMPDIR/scriptTMP" osn=0; osj=0; osk=0 @@ -1608,6 +1682,9 @@ backup) Set_screen_pause_seconds on [[ $(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | awk '{print $2}' | grep -w "^${keyboard%/*}$") != ${keyboard%/*} ]] && unset keyboard { + notification --tag="101" --title="App備份" --text="開始備份app" + starttime1="$(date -u "+%s")" + TIME="$starttime1" while [[ $i -le $r ]]; do [[ $en -ge 229 ]] && en=118 unset name1 name2 apk_path apk_path2 @@ -1626,6 +1703,7 @@ backup) apk_path2="${apk_path2%/*}" if [[ -d $apk_path2 ]]; then echoRgb "備份第$i/$r個應用 剩下$((r - i))個" "3" + notification --tag="101" --title="App備份" --text="備份 $name1 \"$name2\"" echoRgb "備份 $name1 \"$name2\"" "2" unset Backup_folder ChineseName PackageName nobackup No_backupdata result apk_version versionName apk_version2 apk_version3 zsize zmediapath Size data_path Ssaid ssaid Permissions if [[ $Backup_Mode = true ]]; then @@ -1648,7 +1726,6 @@ backup) app_details="$Backup_folder/app_details.json" app_Permissions="$Backup_folder/Permissions" if [[ -f $app_details ]]; then - [[ -f $app_Permissions ]] && . "$app_Permissions" PackageName="$(jq -r '.[] | select(.PackageName != null).PackageName' "$app_details")" if [[ $PackageName != $name2 ]]; then unset Backup_folder ChineseName PackageName nobackup No_backupdata result apk_version versionName apk_version2 apk_version3 zsize zmediapath Size data_path Ssaid ssaid Permissions @@ -1690,6 +1767,7 @@ backup) endtime 2 "$name1 備份" "3" lxj="$(echo "$Occupation_status" | awk '{print $3}' | sed 's/%//g')" echoRgb "完成$((i * 100 / r))% $hx$(echo "$Occupation_status" | awk 'END{print "剩餘:"$1"使用率:"$2}')" "3" + notification --tag="102" --progress="$((i * 100 / r))" --title="App備份" --text="備份第$i/$r個應用 剩下$((r - i))個" rgb_d="$rgb_a" rgb_a=188 echoRgb "_________________$(endtime 1 "已經")___________________" @@ -1703,9 +1781,9 @@ backup) if [[ $var != "" ]]; then if [[ $var != null ]]; then settings put secure enabled_accessibility_services "$var" &>/dev/null - echo_log "設置無障礙" + echo_log "設置無障礙" "備份" settings put secure accessibility_enabled 1 &>/dev/null - echo_log "打開無障礙開關" + echo_log "打開無障礙開關" "備份" fi fi #設置鍵盤 @@ -1713,17 +1791,19 @@ backup) ime enable "$keyboard" &>/dev/null ime set "$keyboard" &>/dev/null settings put secure default_input_method "$keyboard" &>/dev/null - echo_log "設置鍵盤$(appinfo -d "(" -ed ")" -o anwb,pn -pn "${keyboard%/*}" 2>/dev/null)" + echo_log "設置鍵盤$(appinfo -d "(" -ed ")" -o anwb,pn -pn "${keyboard%/*}" 2>/dev/null)" "備份" fi [[ $update_apk2 = "" ]] && update_apk2="暫無更新" [[ $add_app2 = "" ]] && add_app2="暫無更新" echoRgb "\n -已更新的apk=\"$osn\"\n -已新增的備份=\"$osk\"\n -apk版本號無變化=\"$osj\"\n -下列為版本號已變更的應用\n$update_apk2\n -新增的備份....\n$add_app2\n -包含SSAID的應用\n$SSAID_apk2" "3" echo "$(sort "$txt2" | sed -e '/^$/d')" >"$txt2" + notification --tag="101" --title="App備份" --text="app備份完成 $(endtime 1 "應用備份" "3")" if [[ $backup_media = true && $backup_mode = "" ]]; then A=1 B="$(echo "$Custom_path" | grep -v "#" | sed -e '/^$/d' | sed -n '$=')" if [[ $B != "" ]]; then echoRgb "備份結束,備份多媒體" "1" + notification --tag="102" --title="Media備份" --text="Media備份開始" starttime1="$(date -u "+%s")" Backup_folder="$Backup/Media" [[ ! -f $Backup/恢復自定義資料夾.sh ]] && touch_shell "Restore3" "$Backup/恢復自定義資料夾.sh" @@ -1748,6 +1828,7 @@ backup) fi endtime 2 "${REPLY##*/}備份" "1" echoRgb "完成$((A * 100 / B))% $hx$(echo "$Occupation_status" | awk 'END{print "剩餘:"$1"使用率:"$2}')" "2" + notification --tag="102" --progress="$((A * 100 / B))" --title="Media備份" --text="備份第$A/$B個資料夾 剩下$((B - A))個" rgb_d="$rgb_a" rgb_a=188 echoRgb "_________________$(endtime 1 "已經")___________________" @@ -1755,6 +1836,7 @@ backup) done echoRgb "目錄↓↓↓\n -$Backup_folder" endtime 1 "自定義備份" + notification --tag="102" --title="Media備份" --text="Media備份完成 $(endtime 1 "自定義備份")" else echoRgb "自定義路徑為空 無法備份" "0" fi @@ -1772,14 +1854,14 @@ backup) name1="$(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')" if [[ $(echo "$am_start" | egrep -wo "$pkg") = $pkg ]]; then am start -n "$(appinfo -o sa -pn "$pkg" 2>/dev/null)" &>/dev/null - echo_log "啟動$name1" + echo_log "啟動$name1" "備份" fi let i++ done else if [[ $(echo "$am_start" | egrep -wo "$PackageName") = $PackageName ]]; then am start -n "$(appinfo -o sa -pn "$PackageName" 2>/dev/null)" &>/dev/null - echo_log "啟動$name1" + echo_log "啟動$name1" "備份" fi fi Set_screen_pause_seconds off @@ -1821,14 +1903,17 @@ Restore|Restore2) #效驗選填是否正確 isBoolean "$Lo" "Lo" && Lo="$nsx" echoRgb "選擇應用恢復模式\n -音量上僅恢復未安裝,下全恢復" + notification --tag="105" --title="App恢復" --text="選擇應用恢復模式,音量上僅恢復未安裝,下全恢復" get_version "恢復未安裝" "全恢復" && recovery_mode="$branch" Get_user="$(echo "$MODDIR" | rev | cut -d '/' -f1 | cut -d '_' -f1 | rev | egrep -o '[0-9]+')" if [[ $Get_user != $user ]]; then - echoRgb "檢測當前用戶$user與恢復資料夾用戶:$Get_user不同\n -音量上繼續恢復,下不恢復並離開腳本" + echoRgb "檢測當前用戶$user與恢復資料夾用戶:$Get_user不同,音量上繼續恢復,下不恢復並離開腳本" + notification --tag="105" --title="App恢復" --text="檢測當前用戶$user與恢復資料夾用戶:$Get_user不同\n -音量上繼續恢復,下不恢復並離開腳本" get_version "恢復安裝" "不恢復安裝" && recovery_mode2="$branch" fi if [[ -d $Backup_folder2 ]]; then echoRgb "是否恢復多媒體數據\n -音量上恢復,音量下不恢復" "2" + notification --tag="105" --title="App恢復" --text="是否恢復多媒體數據,音量上恢復,音量下不恢復" get_version "恢復媒體數據" "跳過恢復媒體數據" media_recovery="$branch" A=1 @@ -1836,6 +1921,7 @@ Restore|Restore2) fi if [[ -d $Backup_folder3 && $(find "$Backup_folder3" -maxdepth 1 -name "*.zip*" -type f 2>/dev/null | wc -l) != 0 ]]; then echoRgb "是否刷入Magisk模塊\n -音量上刷入,音量下不刷入" "2" + notification --tag="105" --title="App恢復" --text="是否刷入Magisk模塊,音量上刷入,音量下不刷入" get_version "刷入模塊" "跳過刷入模塊" modules_recovery="$branch" fi @@ -1889,6 +1975,7 @@ Restore|Restore2) Set_screen_pause_seconds on en=118 echo "$script">"$TMPDIR/scriptTMP" + notification --tag="105" --title="App恢復" --text="開始恢復app" { while [[ $i -le $r ]]; do [[ $en -ge 229 ]] && en=118 @@ -1896,6 +1983,7 @@ Restore|Restore2) echoRgb "恢復第$i/$r個應用 剩下$((r - i))個" "3" name1="$(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')" name2="$(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')" + notification --tag="105" --title="App恢復" --text="恢復 $name1 \"$name2\"" unset No_backupdata apk_version Permissions if [[ $name1 = *! || $name1 = *! ]]; then name1="$(echo "$name1" | sed 's/!//g ; s/!//g')" @@ -1951,6 +2039,7 @@ Restore|Restore2) [[ $No_backupdata = "" ]]&& echoRgb "$name1沒有安裝無法恢復數據" "0" fi endtime 2 "$name1恢復" "2" && echoRgb "完成$((i * 100 / r))%" "3" + notification --tag="106" --progress="$((i * 100 / r))" --title="App恢復" --text="恢復第$i/$r個應用 剩下$((r - i))個" rgb_d="$rgb_a" rgb_a=188 echoRgb "_________________$(endtime 1 "已經")___________________" @@ -1961,7 +2050,9 @@ Restore|Restore2) if [[ $i = $r && $operate != Restore2 ]]; then endtime 1 "應用恢復" "2" echoRgb "\n -下列為已設置SSAID應用\n$SSAID_Package2\n -下列為設置SSAID失敗應用....\n$SSAID_Package3" "3" + notification --tag="105" --title="App恢復" --text="app恢復完成 $(endtime 1 "應用恢復" "2")" if [[ $media_recovery = true ]]; then + notification --tag="106" --title="Media恢復" --text="Media恢復開始" starttime1="$(date -u "+%s")" app_details="$Backup_folder2/app_details.json" txt="$MODDIR/mediaList.txt" @@ -1974,22 +2065,27 @@ Restore|Restore2) starttime2="$(date -u "+%s")" echoRgb "恢復第$A/$B個壓縮包 剩下$((B - A))個" "3" Release_data "$Backup_folder2/$name1" + notification --tag="106" --progress="$((A * 100 / B))" --title="Media恢復" --text="恢復第$A/$B個壓縮包 剩下$((B - A))個" endtime 2 "$FILE_NAME2恢復" "2" && echoRgb "完成$((A * 100 / B))%" "3" && echoRgb "____________________________________" && let A++ done endtime 1 "自定義恢復" "2" + notification --tag="106" --title="Media恢復" --text="Media恢復完成 $(endtime 1 "Media恢復" "2")" fi if [[ $modules_recovery = true ]]; then A=1 B="$(find "$Backup_folder3" -maxdepth 1 -name "*.zip*" -type f 2>/dev/null | wc -l)" starttime1="$(date -u "+%s")" + notification --tag="107" --title="Module恢復" --text="Module恢復開始" find "$Backup_folder3" -maxdepth 1 -name "*.zip*" -type f 2>/dev/null | while read; do starttime2="$(date -u "+%s")" echoRgb "刷入第$A/$B個模塊 剩下$((B - A))個" "3" echoRgb "刷入${REPLY##*/}" "2" magisk --install-module "$REPLY" + notification --tag="107" --progress="$((A * 100 / B))" --title="Module恢復" --text="刷入第$A/$B個模塊 剩下$((B - A))個" endtime 2 "${REPLY##*/}刷入" "2" && echoRgb "完成$((A * 100 / B))%" "3" && echoRgb "____________________________________" && let A++ done endtime 1 "刷入模塊" "2" + notification --tag="107" --title="Module恢復" --text="Module恢復完成 $(endtime 1 "Module恢復" "2")" fi fi let i++ en++ nskg++ @@ -2032,15 +2128,18 @@ Restore3) [[ $B = "" ]] && echoRgb "mediaList.txt壓縮包名為空或是被注釋了\n -請執行\"重新生成應用列表.sh\"獲取列表再來恢復" "0" && exit 1 echo "$script">"$TMPDIR/scriptTMP" { + notification --tag="108" --title="Media恢復" --text="Media恢復開始" while [[ $A -le $B ]]; do name1="$(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${A}p" | awk '{print $1}')" starttime2="$(date -u "+%s")" echoRgb "恢復第$A/$B個壓縮包 剩下$((B - A))個" "3" Release_data "$mediaDir/$name1" + notification --tag="108" --progress="$((A * 100 / B))" --title="Media恢復" --text="恢復第$A/$B個壓縮包 剩下$((B - A))個" endtime 2 "$FILE_NAME2恢復" "2" && echoRgb "完成$((A * 100 / B))%" "3" && echoRgb "____________________________________" && let A++ done Set_screen_pause_seconds off endtime 1 "恢復結束" + notification --tag="108" --title="Media恢復" --text="Media恢復完成 $(endtime 1 "Media恢復")" rm -rf "$TMPDIR/scriptTMP" } & ;; @@ -2206,6 +2305,7 @@ backup_media) [[ ! -f $mediatxt ]] && echo "#不需要恢復的資料夾請在開頭使用#注釋 比如:#Download" > "$mediatxt" echo "$script">"$TMPDIR/scriptTMP" Set_screen_pause_seconds on + notification --tag="109" --title="Media備份" --text="Media備份開始" { echo "$Custom_path" | grep -v "#" | sed -e '/^$/d' | sed 's/\/$//' | while read; do echoRgb "備份第$A/$B個資料夾 剩下$((B - A))個" "3" @@ -2222,6 +2322,7 @@ backup_media) Backup_data "${REPLY##*/}" "$REPLY" fi endtime 2 "${REPLY##*/}備份" "1" + notification --tag="109" --progress="$((A * 100 / B))" --title="Media備份" --text="備份第$A/$B個資料夾 剩下$((B - A))個" echoRgb "完成$((A * 100 / B))% $hx$(echo "$Occupation_status" | awk 'END{print "剩餘:"$1"使用率:"$2}')" "2" && echoRgb "____________________________________" && let A++ done } & @@ -2229,6 +2330,7 @@ backup_media) Calculate_size "$Backup_folder" Set_screen_pause_seconds off endtime 1 "自定義備份" + notification --tag="109" --title="Media備份" --text="Media備份完成 $(endtime 1 "自定義備份")" rm -rf "$TMPDIR/scriptTMP" else echoRgb "自定義路徑為空 無法備份" "0" diff --git a/備份應用.sh b/備份應用.sh index 89401cd..6d0b91e 100644 --- a/備份應用.sh +++ b/備份應用.sh @@ -3,7 +3,15 @@ if [ -f "${0%/*}/tools/tools.sh" ]; then MODDIR="${0%/*}" operate="backup" conf_path="${0%/*}/backup_settings.conf" - . "${0%/*}/tools/tools.sh" | tee "$MODDIR/log.txt" + if [ "$(grep -o 'background_execution=.*' "$conf_path" | awk -F '=' '{print $2}')" = 1 ]; then + { + notification=true + . "${0%/*}/tools/tools.sh" | tee "${0%/*}/log.txt" + } & + else + notification=false + . "${0%/*}/tools/tools.sh" | tee "${0%/*}/log.txt" + fi else echo "${0%/*}/tools/tools.sh遺失" fi diff --git a/備份自定義資料夾.sh b/備份自定義資料夾.sh index 286890d..6e388b9 100644 --- a/備份自定義資料夾.sh +++ b/備份自定義資料夾.sh @@ -3,7 +3,15 @@ if [ -f "${0%/*}/tools/tools.sh" ]; then MODDIR="${0%/*}" operate="backup_media" conf_path="${0%/*}/backup_settings.conf" - . "${0%/*}/tools/tools.sh" | tee "$MODDIR/log.txt" + if [ "$(grep -o 'background_execution=.*' "$conf_path" | awk -F '=' '{print $2}')" = 1 ]; then + { + notification=true + . "${0%/*}/tools/tools.sh" | tee "${0%/*}/log.txt" + } & + else + notification=false + . "${0%/*}/tools/tools.sh" | tee "${0%/*}/log.txt" + fi else echo "${0%/*}/tools/tools.sh遺失" fi diff --git a/生成應用列表.sh b/生成應用列表.sh index d044cb1..7f2b2d4 100644 --- a/生成應用列表.sh +++ b/生成應用列表.sh @@ -3,7 +3,15 @@ if [ -f "${0%/*}/tools/tools.sh" ]; then MODDIR="${0%/*}" operate="Getlist" conf_path="${0%/*}/backup_settings.conf" - . "${0%/*}/tools/tools.sh" | tee "$MODDIR/log.txt" + if [ "$(grep -o 'background_execution=.*' "$conf_path" | awk -F '=' '{print $2}')" = 1 ]; then + { + notification=true + . "${0%/*}/tools/tools.sh" | tee "${0%/*}/log.txt" + } & + else + notification=false + . "${0%/*}/tools/tools.sh" | tee "${0%/*}/log.txt" + fi else echo "${0%/*}/tools/tools.sh遺失" fi