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 0000000..efa38e3 Binary files /dev/null and b/tools/notification.dex differ 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