diff --git a/backup_settings.conf b/backup_settings.conf index f7d98f1..40f069e 100644 --- a/backup_settings.conf +++ b/backup_settings.conf @@ -4,7 +4,7 @@ Lo=0 #後台執行腳本(設置0不能關閉當前終端,有壓縮速率,設置1可完全關閉MT使用有狀態欄通知 沒有壓縮速率顯示,設置2也可離開腳本,備份完成後狀態欄通知 無壓縮速率顯示) -background_execution=2 +background_execution=0 #腳本語言設置 留空則自動識別系統語言環境並翻譯 #1簡體中文 0繁體中文 @@ -25,7 +25,7 @@ update=1 mount_point="rannki|0000-1" #使用者(如0 999等用戶,如存在多個用戶留空強制音量鍵選擇,無多個用戶則默認用戶0不詢問) -user= +user=0 #備份模式 #1包含數據+安裝包,0僅包安裝包 @@ -41,7 +41,10 @@ Backup_obb_data=1 #是否在應用數據備份完成後備份自定義目錄 #1開啟 0關閉 -backup_media=1 +backup_media=0 + +#存在前後台的應用忽略備份(1備份0忽略) +Background_apps_ignore=0 #假設你遇到列表輸出異常問題請將此設為1 debug_list=0 @@ -51,7 +54,8 @@ 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時黑名單模式才能使用) diff --git a/tools/Device_List b/tools/Device_List index 04929bc..3cee891 100644 --- a/tools/Device_List +++ b/tools/Device_List @@ -1394,6 +1394,9 @@ "XT2343-3" "moto g54" "XT2363-4" "moto g34" "XT2401-2" "moto X50 Ultra" +"XT2427-4" "moto S50 Neo" +"XT2453-2" "moto razr 50" +"XT2451-4" "moto razr 50 Ultra" "TA-1000" "Nokia 6" "TA-1054" "Nokia 6 (第二代)" "TA-1041" "Nokia 7" @@ -1471,7 +1474,9 @@ "NX301J" "nubia N5" "nubia 8150N" "nubia Neo 5G" "Z2352N" "nubia Neo 2 5G" +"Z2353" "nubia Music" "Z6255CA" "nubia Blade A72" +"nubia 8550" "nubia V50 Vita" "LPD-20W" "nubia Pad 3D" "NX609J" "紅魔電競遊戲手機" "NX619J" "紅魔 Mars 電競手機" @@ -1593,8 +1598,6 @@ "CPH2609" "OnePlus 12R 歐洲版/國際版" "CPH2611" "OnePlus 12R 北美版" "PJF110" "OnePlus Ace 3V 國行版" -"CPH2619" "OnePlus Nord 4 印度版" -"CPH2621" "OnePlus Nord 4 歐洲版/國際版" "PJX110" "OnePlus Ace 3 Pro 國行版" "AC2001" "OnePlus Nord 印度版" "AC2003" "OnePlus Nord 歐洲版/國際版" @@ -1611,6 +1614,8 @@ "CPH2465" "OnePlus Nord CE 3 Lite 國際版" "CPH2467" "OnePlus Nord CE 3 Lite 印度版" "CPH2613" "OnePlus Nord CE4 印度版" +"CPH2619" "OnePlus Nord CE4 Lite 印度版" +"CPH2621" "OnePlus Nord CE4 Lite 歐洲版/國際版" "BE2025" "OnePlus Nord N10 Metro 版" "BE2026" "OnePlus Nord N10 北美版" "BE2029" "OnePlus Nord N10 歐洲版/國際版" @@ -1631,11 +1636,13 @@ "OPD2203" "OnePlus Pad" "OPD2304" "OnePlus Pad Go LTE" "OPD2305" "OnePlus Pad Go Wi-Fi" +"OPD2404" "OnePlus Pad Pro" "W101IN" "OnePlus Band 印度版" "OPBBE221" "OnePlus Nord Watch 國際版" "W301CN" "OnePlus Watch 國行版 / Cyberpunk 2077 限定版" -"W501CN" "OnePlus Watch 鈷合金限定版(國行)" -"W301GB" "OnePlus Watch 國際版 / 鈷合金限定版(國際)" +"W501CN" "OnePlus Watch 鈷合金限定版 (國行)" +"W301GB" "OnePlus Watch 國際版 / 鈷合金限定版 (國際)" +"OPWW234" "OnePlus Watch 2 國行版" "OPWWE231" "OnePlus Watch 2 國際版" "E6683" "Xperia Z5 dual" "E6883" "Xperia Z5 Premium" diff --git a/tools/tools.sh b/tools/tools.sh index 21faddd..0a9fe55 100644 --- a/tools/tools.sh +++ b/tools/tools.sh @@ -6,7 +6,7 @@ MODDIR_NAME="${MODDIR##*/}" tools_path="$MODDIR/tools" Compression_rate=3 script="${0##*/}" -backup_version="V15.9.1" +backup_version="V15.9.2" [[ $SHELL = *mt* ]] && echo "請勿使用MT管理器拓展包環境執行,請更換系統環境" && exit 2 update_backup_settings_conf() { echo "#音量鍵選擇總開關 是否在每次執行備份腳本時使用音量鍵詢問備份需求 @@ -54,6 +54,9 @@ Backup_obb_data="${Backup_obb_data:-1}" #1開啟 0關閉 backup_media="${backup_media:-0}" +#存在前後台的應用忽略備份(1備份0忽略) +Background_apps_ignore="${Background_apps_ignore:-0}" + #假設你遇到列表輸出異常問題請將此設為1 debug_list="${debug_list:-0}" @@ -148,6 +151,9 @@ Shell_LANG="$Shell_LANG" #自動更新腳本(留空強制音量鍵選擇) update="${update:-1}" +#存在前後台的應用忽略恢復(1恢復0忽略) +Background_apps_ignore="${Background_apps_ignore:-0}" + #使用者(如0 999等用戶,留空如存在多個用戶強制音量鍵選擇,無多用戶則默認0不詢問) user= @@ -468,7 +474,7 @@ else RAMINFO="RAM:null" fi echoRgb "---------------------SpeedBackup---------------------" -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 -Selinux狀態:$([[ $(getenforce) = Permissive ]] && echo "寬容" || echo "嚴格")\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 -Selinux狀態:$([[ $(getenforce) = Permissive ]] && echo "寬容" || echo "嚴格")\n -By@YAWAsau\n -Support: https://jq.qq.com/?_wv=1027&k=f5clPNC3\n -$(down -s -L https://v1.hitokoto.cn/?encode=text)" case $MODDIR in *Backup_*) if [[ -f $MODDIR/app_details.json ]]; then @@ -572,7 +578,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翻譯" "SpeedBackup" + echo_log "$(echo "$REPLY" | sed "s|^$path_hierarchy/||")翻譯" "SpeedBackup" mv "$REPLY" "$MODDIR_NAME/$(ts "$FILE_NAME")" fi fi @@ -582,7 +588,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翻譯" "SpeedBackup" + echo_log "$(echo "$REPLY" | sed "s|^$path_hierarchy/||")翻譯" "SpeedBackup" mv "$REPLY" "$MODDIR_NAME/$(ts "$FILE_NAME")" let HT++ fi ;; @@ -637,6 +643,7 @@ if [ -f \"$MODDIR_Path/tools/tools.sh\" ]; then MODDIR=\"\${0%/*}\" operate=\"$1\" conf_path=\"$conf_path\" + [ ! -f \"$conf_path\" ] && . \"\${0%/*}/tools/tools.sh\" case \$(grep -o 'background_execution=.*' \"\$conf_path\" | awk -F '=' '{print \$2}') in 0) notification=false @@ -783,7 +790,7 @@ if [[ $path_hierarchy != "" && $Script_target_language != "" ]]; then ts -f "$REPLY" -o "$REPLY" if [[ $? = 0 ]]; then touch "$TMPDIR/0" - echo_log "$REPLY翻譯" "SpeedBackup" + echo_log "$(echo "$REPLY" | sed "s|^$path_hierarchy/||")翻譯" "SpeedBackup" MODDIR="${0%/*}" if [[ $REPLY != *Backup_* ]]; then update_backup_settings_conf>"${REPLY%/*/*}/backup_settings.conf" @@ -962,6 +969,7 @@ kill_app() { [[ $Pause_Freeze = "" ]] && Pause_Freeze="0" if [[ $Pause_Freeze = 0 ]]; then if [[ $(dumpsys activity processes | grep "packageList" | cut -d '{' -f2 | cut -d '}' -f1 | egrep -w "^$name2$" | sed -n '1p') = $name2 ]]; then + pkill -9 -f "$name2$|$name2[:/_]" killall -9 "$name2" &>/dev/null am force-stop --user "$user" "$name2" &>/dev/null am kill "$name2" &>/dev/null @@ -997,7 +1005,7 @@ Backup_apk() { result=0 echoRgb "Apk版本無更新 跳過備份" "2" else - if [[ $nobackup != true ]]; then + if [[ $nobackup = false ]]; then if [[ $apk_version != "" ]]; then let osn++ update_apk="$(echo "$name1 \"$name2\"")" @@ -1468,6 +1476,7 @@ get_name(){ 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" + echo "$(sed -e "s/$name1 $name2//g ; /^$/d" "$txt" 2>/dev/null)" >"$txt" let i++ done rm -rf "$txt3" @@ -1544,6 +1553,31 @@ restore_permissions () { [[ $true_permissions != "" ]] && Set_true_Permissions "$name2" "$(echo "$true_permissions" | xargs)" &>/dev/null [[ $false_permissions != "" ]] && Set_false_Permissions "$name2" "$(echo "$false_permissions" | xargs)" &>/dev/null } +Background_application_list() { + if [[ $Background_apps_ignore = false ]]; then + unset Backstage apk_path3 + #獲取後台 + if [[ $(dumpsys activity activities | awk -F 'packageName=' '/packageName=/{split($2, a, " "); print a[1]}' | sort | uniq) != "" ]]; then + apk_path3="$(echo "$(pm path --user "$user" "$(dumpsys activity activities | awk -F 'packageName=' '/packageName=/{split($2, a, " "); print a[1]}' | sort | uniq | head -1)" 2>/dev/null | cut -f2 -d ':')" | head -1)" + if [[ -d ${apk_path3%/*} ]]; then + Backstage="$(dumpsys activity activities | awk -F 'packageName=' '/packageName=/{split($2, a, " "); print a[1]}' | sort | uniq)" + else + if [[ $(am stack list | awk '/taskId/&&!/unknown/{split($2, a, "/"); print a[1]}') != "" ]]; then + apk_path3="$(echo "$(pm path --user "$user" "$(am stack list | awk '/taskId/&&!/unknown/{split($2, a, "/"); print a[1]}' | head -1)" 2>/dev/null | cut -f2 -d ':')" | head -1)" + [[ -d ${apk_path3%/*} ]] && Backstage="$(am stack list | awk '/taskId/&&!/unknown/{split($2, a, "/"); print a[1]}')" + fi + fi + else + if [[ $(am stack list | awk '/taskId/&&!/unknown/{split($2, a, "/"); print a[1]}') != "" ]]; then + apk_path3="$(echo "$(pm path --user "$user" "$(am stack list | awk '/taskId/&&!/unknown/{split($2, a, "/"); print a[1]}' | head -1)" 2>/dev/null | cut -f2 -d ':')" | head -1)" + [[ -d ${apk_path3%/*} ]] && Backstage="$(am stack list | awk '/taskId/&&!/unknown/{split($2, a, "/"); print a[1]}')" + fi + fi + [[ ! -d ${apk_path3%/*} ]] && { + echoRgb "獲取當前後台應用失敗" "0" && unset Backstage + } + fi +} case $operate in backup) kill_Serve @@ -1589,6 +1623,10 @@ backup) echoRgb "全部應用備份結束後是否備份自定義目錄\n -音量上備份,音量下不備份" "2" get_version "備份" "不備份" && backup_media="$branch" } + [[ $Background_apps_ignore != "" ]] && isBoolean "$Background_apps_ignore" "Background_apps_ignore" && Background_apps_ignore="$nsx" || { + echoRgb "存在前台或是後台的應用忽略備份\n -音量上備份,音量下忽略" "2" + get_version "備份" "忽略" && Background_apps_ignore="$branch" + } else [[ $Backup_Mode = "" ]] && { echoRgb "選擇備份模式\n -音量上備份應用+數據,音量下僅應用不包含數據" "2" @@ -1614,6 +1652,10 @@ backup) echoRgb "全部應用備份結束後是否備份自定義目錄\n -音量上備份,音量下不備份" "2" get_version "備份" "不備份" && backup_media="$branch" } || isBoolean "$backup_media" "backup_media" && backup_media="$nsx" + [[ $Background_apps_ignore = "" ]] && { + echoRgb "存在前台或是後台的應用忽略備份\n -音量上備份,音量下忽略" "2" + get_version "備份" "忽略" && Background_apps_ignore="$branch" + } fi i=1 #數據目錄 @@ -1641,29 +1683,23 @@ backup) backup_path echoRgb "配置詳細:\n -壓縮方式:$Compression_method\n -音量鍵確認:$Lo\n -更新:$update\n -備份模式:$Backup_Mode\n -備份外部數據:$Backup_obb_data\n -備份user數據:$Backup_user_data\n -自定義目錄備份:$backup_media\n" D="1" - C="$(sed -e '/^$/d' "$txt" 2>/dev/null | sed -n '$=')" - [[ $user = 0 ]] && Apk_info="$(appinfo -sort-i -o pn -pn $system -3 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)" || Apk_info="$(appinfo -sort-i -o pn -pn $system $(pm list packages -3 --user "$user" | cut -f2 -d ':') 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)" + Apk_info="$(echo "$system\n$(pm list packages -3 --user "$user" | cut -f2 -d ':')" | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)" [[ $Apk_info = "" ]] && echoRgb "appinfo輸出失敗" "0" && exit 2 [[ $backup_mode = "" ]] && { echoRgb "檢查備份列表中是否存在已經卸載應用" "3" - while [[ $D -le $C ]]; do - name1="$(sed -e '/^$/d' "$txt" 2>/dev/null | sed -n "${D}p" | awk '{print $1}')" - name2="$(sed -e '/^$/d' "$txt" 2>/dev/null | sed -n "${D}p" | awk '{print $2}')" - if [[ $name1 != "" && $name2 != "" ]]; then - if [[ $(echo "$Apk_info" | egrep -w "^$name2$") != "" ]]; then - [[ $Tmplist = "" ]] && Tmplist='#不需要備份的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market(忽略安裝包和數據)\n#不需要備份數據的應用請在開頭使用!注釋 比如:!酷安 com.coolapk.market(僅忽略數據)' - Tmplist="$Tmplist\n$name1 $name2" - else - case $name1 in - *不需要*) ;; - *) - echo "$(sed -e "s/$name1 $name2//g ; /^$/d" "$txt" 2>/dev/null)" >"$txt" - echoRgb "$name1 $name2不存在系統,從列表中刪除" "0" ;; - esac + while read -r ; do + if [[ $(echo "$REPLY" | sed 's/^[ \t]*//') != \#* ]]; then + app=($REPLY $REPLY) + if [[ ${app[1]} != "" && ${app[2]} != "" ]]; then + if [[ $(echo "$Apk_info" | egrep -w "^${app[1]}$") != "" ]]; then + [[ $Tmplist = "" ]] && Tmplist='#不需要備份的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market(忽略安裝包和數據)\n#不需要備份數據的應用請在開頭使用!注釋 比如:!酷安 com.coolapk.market(僅忽略數據)' + Tmplist="$Tmplist\n$REPLY" + else + echoRgb "$REPLY不存在系統,從列表中刪除" "0" + fi fi - let D++ fi - done + done < "$txt" } [[ $Tmplist != "" ]] && echo "$Tmplist" | sed -e '/^$/d' | sort>"$txt" r="$(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n '$=')" @@ -1735,6 +1771,9 @@ backup) notification --tag="101" --title="App備份" --text="備份 $name1 \"$name2\"" echoRgb "備份 $name1 \"$name2\"" "2" unset Backup_folder ChineseName PackageName nobackup No_backupdata result apk_version apk_version2 zsize zmediapath Size data_path Ssaid ssaid Permissions + nobackup="false" + Background_application_list + [[ $Backstage != "" && $(echo "$Backstage" | egrep -w "^$name2$") != "" ]] && echoRgb "$name1存在後台 忽略備份" "0" && nobackup="true" if [[ $Backup_Mode = true ]]; then if [[ $name1 = !* || $name1 = !* ]]; then name1="$(echo "$name1" | sed 's/!//g ; s/!//g')" @@ -1753,14 +1792,12 @@ backup) fi Backup_folder="$Backup/$name1" app_details="$Backup_folder/app_details.json" - app_Permissions="$Backup_folder/Permissions" if [[ -f $app_details ]]; then PackageName="$(jq -r '.[] | select(.PackageName != null).PackageName' "$app_details")" if [[ $PackageName != $name2 ]]; then unset Backup_folder ChineseName PackageName nobackup No_backupdata result apk_version apk_version2 zsize zmediapath Size data_path Ssaid ssaid Permissions Backup_folder="$Backup/${name1}[${name2}]" app_details="$Backup_folder/app_details.json" - app_Permissions="$Backup_folder/Permissions" fi fi [[ $hx = USB && $PT = "" ]] && echoRgb "隨身碟意外斷開 請檢查穩定性" "0" && exit 1 @@ -1944,37 +1981,39 @@ Restore|Restore2) if [[ -d $Backup_folder2 ]]; then echoRgb "是否恢復多媒體數據\n -音量上恢復,音量下不恢復" "2" notification --tag="105" --title="App恢復" --text="是否恢復多媒體數據,音量上恢復,音量下不恢復" - get_version "恢復媒體數據" "跳過恢復媒體數據" - media_recovery="$branch" + get_version "恢復媒體數據" "跳過恢復媒體數據" && media_recovery="$branch" A=1 B="$(find "$Backup_folder2" -maxdepth 1 -name "*.tar*" -type f 2>/dev/null | wc -l)" 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" + get_version "刷入模塊" "跳過刷入模塊" && modules_recovery="$branch" fi + [[ $Background_apps_ignore != "" ]] && isBoolean "$Background_apps_ignore" "Background_apps_ignore" && Background_apps_ignore="$nsx" || { + echoRgb "存在前台或是後台的應用忽略恢復\n -音量上恢復,音量下忽略" "2" + get_version "恢復" "忽略" && Background_apps_ignore="$branch" + } [[ $recovery_mode2 = false ]] && exit 2 if [[ $recovery_mode = true ]]; then echoRgb "獲取未安裝應用中" - TXT="$MODDIR/TEMP.txt" [[ $user = 0 ]] && Apk_info="$(appinfo -sort-i -o pn -3 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)" || Apk_info="$(appinfo -sort-i -o pn $(pm list packages -3 --user "$user" | cut -f2 -d ':') 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)" [[ $Apk_info = "" ]] && echoRgb "appinfo輸出失敗" "0" && exit 2 - while [[ $i -le $r ]]; do - 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}')" - if [[ $(echo "$Apk_info" | egrep -w "^$name2$") = "" ]]; then - echo "$name1 $name2">>"$TXT" - fi - let i++ - done - i=1 - sort -u "$TXT" -o "$TXT" 2>/dev/null - r="$(grep -v "#" "$TXT" 2>/dev/null | sed -e '/^$/d' | sed -n '$=')" + while read -r ; do + if [[ $(echo "$REPLY" | sed 's/^[ \t]*//') != \#* ]]; then + app=($REPLY $REPLY) + [[ ${app[1]} != "" && ${app[2]} != "" ]] && { + [[ $(echo "$Apk_info" | egrep -w "^${app[1]}$") = "" ]] && Tmplist="$Tmplist\n$REPLY" + } + fi + done < "$txt" + r="$(echo "$Tmplist" | sed -e '/^$/d' | sed -n '$=')" if [[ $r != "" ]]; then echoRgb "獲取完成 預計安裝$r個應用" - txt="$TXT" + txt="$Tmplist" + echoRgb "未安裝應用列表\n$txt\n確認無誤使用音量上繼續恢復,音量下退出腳本" "1" + get_version "恢復安裝" "退出腳本" + [[ $branch = false ]] && exit else echoRgb "獲取完成 但備份內應用都已安裝....正在退出腳本" "0" && exit 0 fi @@ -1985,13 +2024,11 @@ Restore|Restore2) r=1 Backup_folder="$MODDIR" app_details="$Backup_folder/app_details.json" - app_Permissions="$Backup_folder/Permissions" if [[ ! -f $app_details ]]; then echoRgb "$app_details遺失,無法獲取包名" "0" && exit 1 else ChineseName="$(jq -r 'to_entries[] | select(.key != null).key' "$app_details" | head -n 1)" PackageName="$(jq -r '.[] | select(.PackageName != null).PackageName' "$app_details")" - [[ -f $app_Permissions ]] && . "$app_Permissions" &>/dev/null fi name1="$ChineseName" [[ $name1 = "" ]] && name1="${Backup_folder##*/}" @@ -1999,6 +2036,10 @@ Restore|Restore2) name2="$PackageName" [[ $name2 = "" ]] && echoRgb "包名獲取失敗" "0" && exit 2 DX="單獨恢復" + [[ $Background_apps_ignore != "" ]] && isBoolean "$Background_apps_ignore" "Background_apps_ignore" && Background_apps_ignore="$nsx" || { + echoRgb "存在前台或是後台的應用忽略恢復\n -音量上恢復,音量下忽略" "2" + get_version "恢復" "忽略" && Background_apps_ignore="$branch" + } fi #開始循環$txt內的資料進行恢復 #記錄開始時間 @@ -2029,12 +2070,14 @@ Restore|Restore2) echoRgb "$Backup_folder/app_details.json不存在" "0" exit 2 fi - app_Permissions="$Backup_folder/Permissions" - [[ -f $app_Permissions ]] && . "$app_Permissions" &>/dev/null [[ $name2 = "" ]] && echoRgb "應用包名獲取失敗" "0" && exit 1 fi if [[ -d $Backup_folder ]]; then echoRgb "恢復$name1 ($name2)" "2" + Background_application_list + restore="true" + [[ $Backstage != "" && $(echo "$Backstage" | egrep -w "^$name2$") != "" ]] && echoRgb "$name1存在後台 忽略恢復" "0" && restore="false" + [[ $restore = true ]] && { starttime2="$(date -u "+%s")" if [[ $(pm path --user "$user" "$name2" 2>/dev/null) = "" ]]; then installapk @@ -2076,6 +2119,7 @@ Restore|Restore2) rgb_a=188 echoRgb "_________________$(endtime 1 "已經")___________________" rgb_a="$rgb_d" + } else echoRgb "$Backup_folder資料夾遺失,無法恢復" "0" fi @@ -2123,7 +2167,6 @@ Restore|Restore2) let i++ en++ nskg++ done restore_freeze - rm -rf "$TMPDIR/scriptTMP" "$TXT" Set_screen_pause_seconds off starttime1="$TIME" [[ $background_execution = 2 ]] && app_process /system/bin io.github.qqlittleice233.magic.Notification -send --importance=3 --tag="105" --title="恢復" --text="恢復完成 $(endtime 1 "$DX開始到結束")" @@ -2296,24 +2339,19 @@ Getlist) let rgb_a++ LR++ done if [[ -f $nametxt ]]; then - D="1" - C="$(sed -e '/^$/d' "$nametxt" | sed -n '$=')" - while [[ $D -le $C ]]; do - name1="$(sed -e '/^$/d' "$nametxt" | sed -n "${D}p" | awk '{print $1}')" - name2="$(sed -e '/^$/d' "$nametxt" | sed -n "${D}p" | awk '{print $2}')" - if [[ $name1 != "" && $name2 != "" ]]; then - if [[ $(echo "$Apk_info2" | egrep -w "^$name2$") != "" ]]; then - [[ $Tmplist = "" ]] && Tmplist='#不需要備份的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market(忽略安裝包和數據)\n#不需要備份數據的應用請在開頭使用!注釋 比如:!酷安 com.coolapk.market(僅忽略數據)' - Tmplist="$Tmplist\n$name1 $name2" - else - case $name1 in - *不需要*) ;; - *) echoRgb "$name1 $name2不存在系統,從列表中刪除" "0" ;; - esac + while read -r ; do + if [[ $(echo "$REPLY" | sed 's/^[ \t]*//') != \#* ]]; then + app=($REPLY $REPLY) + if [[ ${app[1]} != "" && ${app[2]} != "" ]]; then + if [[ $(echo "$Apk_info2" | egrep -w "^${app[1]}$") != "" ]]; then + [[ $Tmplist = "" ]] && Tmplist='#不需要備份的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market(忽略安裝包和數據)\n#不需要備份數據的應用請在開頭使用!注釋 比如:!酷安 com.coolapk.market(僅忽略數據)' + Tmplist="$Tmplist\n$REPLY" + else + echoRgb "$REPLY不存在系統,從列表中刪除" "0" + fi fi - let D++ - fi - done + fi + done < "$nametxt" [[ $Tmplist != "" ]] && echo "$Tmplist" | sed -e '/^$/d' | sort>"$nametxt" fi wait diff --git a/備份應用.sh b/備份應用.sh index 5d9a93b..fee661c 100644 --- a/備份應用.sh +++ b/備份應用.sh @@ -3,6 +3,7 @@ if [ -f "${0%/*}/tools/tools.sh" ]; then MODDIR="${0%/*}" operate="backup" conf_path="${0%/*}/backup_settings.conf" + [ ! -f "${0%/*}/backup_settings.conf" ] && . "${0%/*}/tools/tools.sh" case $(grep -o 'background_execution=.*' "$conf_path" | awk -F '=' '{print $2}') in 0) notification=false diff --git a/備份自定義資料夾.sh b/備份自定義資料夾.sh index c1a56cc..e2bf947 100644 --- a/備份自定義資料夾.sh +++ b/備份自定義資料夾.sh @@ -3,6 +3,7 @@ if [ -f "${0%/*}/tools/tools.sh" ]; then MODDIR="${0%/*}" operate="backup_media" conf_path="${0%/*}/backup_settings.conf" + [ ! -f "${0%/*}/backup_settings.conf" ] && . "${0%/*}/tools/tools.sh" case $(grep -o 'background_execution=.*' "$conf_path" | awk -F '=' '{print $2}') in 0) notification=false diff --git a/生成應用列表.sh b/生成應用列表.sh index da07e8e..716f853 100644 --- a/生成應用列表.sh +++ b/生成應用列表.sh @@ -3,6 +3,7 @@ if [ -f "${0%/*}/tools/tools.sh" ]; then MODDIR="${0%/*}" operate="Getlist" conf_path="${0%/*}/backup_settings.conf" + [ ! -f "${0%/*}/backup_settings.conf" ] && . "${0%/*}/tools/tools.sh" case $(grep -o 'background_execution=.*' "$conf_path" | awk -F '=' '{print $2}') in 0) notification=false