From b641db9d1c7fdaae00bb23dcda38b80818b0e1e5 Mon Sep 17 00:00:00 2001 From: YAWAsau <229953100a@gmail.com> Date: Thu, 30 Dec 2021 17:53:53 +0800 Subject: [PATCH] bug fix --- Getlist.sh | 12 +++- backup.sh | 57 ++++++++++++------- tools/bin/bin.sh | 112 ++++++++++++++++++------------------- tools/bin/update | 0 tools/script/Get_DirName | 2 +- tools/script/delete_backup | 1 + 6 files changed, 106 insertions(+), 78 deletions(-) create mode 100644 tools/bin/update diff --git a/Getlist.sh b/Getlist.sh index ae42db9..560bc78 100644 --- a/Getlist.sh +++ b/Getlist.sh @@ -52,7 +52,17 @@ appinfo -sort-i -d " " -o ands,pn -pn $system $launcher_app -3 2>/dev/null | sed fi [[ $xz != "" ]] && let i++ bn++ done -[[ -f $nametxt ]] && (cat "$nametxt" | sed -e '/^$/d' >"$nametxt.tmp" && mv "$nametxt.tmp" "$nametxt") || (echoRgb "$nametxt生成失敗" "0" && exit 2) +if [[ -f $nametxt ]]; then + echoRgb "列表:$nametxt" + cat "$nametxt" | grep -v "#" | while read; do + name=($REPLY $REPLY) + if [[ $REPLY != "" && $(pm path "${name[1]}" | cut -f2 -d ':') = "" ]]; then + echoRgb "${name[2]}不存在系統,從列表中刪除" + cat "$nametxt" | sed -e "s/$REPLY//g ; /^$/d" >"$nametxt.tmp" && mv "$nametxt.tmp" "$nametxt" + fi + done + cat "$nametxt" | sed -e '/^$/d' >"$nametxt.tmp" && mv "$nametxt.tmp" "$nametxt" +fi endtime 1 [[ ! -e $MODDIR/tmp ]] && echoRgb "無新增應用" || echoRgb "輸出包名結束 請查看$nametxt" rm -rf "$MODDIR/tmp" \ No newline at end of file diff --git a/backup.sh b/backup.sh index 8a16020..ef7787f 100644 --- a/backup.sh +++ b/backup.sh @@ -33,13 +33,28 @@ path="/data/media/0/Android" path2="/data/user/0" txt="$MODDIR/appList.txt" if [[ $Output_path != "" ]]; then - echoRgb "使用自定義目錄\n-輸出位置:$Output_path" && Backup="$Output_path/Backup_$Compression_method" + echoRgb "使用自定義目錄\n -輸出位置:$Output_path" && Backup="$Output_path/Backup_$Compression_method" else Backup="$MODDIR/Backup_$Compression_method" + if [[ $APP_ENV = 1 ]]; then + Backup="/data/media/0/Download/Backup_$Compression_method" + echoRgb "沒有設定備份目錄 使用默認路徑\n $Backup" + fi fi txt="${txt/'/storage/emulated/'/'/data/media/'}" PU="$(ls /dev/block/vold | grep public)" -[[ ! -f $txt ]] && echoRgb "請執行\"Getlist.sh\"獲取應用列表再來備份" "0" && exit 1 +if [[ ! -f $txt ]]; then + echoRgb "請執行\"Getlist.sh\"獲取應用列表再來備份" "0" && exit 1 +else + cat "$txt" | grep -v "#" | while read; do + name=($REPLY $REPLY) + if [[ $REPLY != "" && $(pm path "${name[1]}" | cut -f2 -d ':') = "" ]]; then + echoRgb "${name[2]}不存在系統,從列表中刪除" + cat "$txt" | sed -e "s/$REPLY//g ; /^$/d" >"$txt.tmp" && mv "$txt.tmp" "$txt" + fi + done + cat "$txt" | sed -e '/^$/d' >"$txt.tmp" && mv "$txt.tmp" "$txt" +fi r="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n '$=')" [[ $r = "" ]] && echoRgb "爬..appList.txt是空的或是包名被注釋了這樣備份個鬼" "0" && exit 1 data=/data @@ -104,7 +119,7 @@ Backup_apk() { rm -rf "$Backup_folder"/*.apk #備份apk echoRgb "$1" - [[ $name1 != $Open_apps ]] && am force-stop "$name2" + [[ $name2 != $Open_apps2 ]] && am force-stop "$name2" echo "$apk_path" | sed -e '/^$/d' | while read; do path="$REPLY" b_size="$(ls -l "$path" | awk '{print $5}')" @@ -156,21 +171,21 @@ Backup_data() { esac if [[ -d $data_path ]]; then if [[ $Size != $(du -ks "$data_path" | awk '{print $1}') ]]; then - [[ $name1 != $Open_apps ]] && am force-stop "$name2" + [[ $name2 != $Open_apps2 ]] && am force-stop "$name2" [[ $lxj -ge 95 ]] && echoRgb "$hx空間不足,達到$lxj%" "0" && exit 2 echoRgb "備份$1數據" "2" case $1 in user) case $Compression_method in - tar|Tar|TAR) tar --exclude="${data_path##*/}/.ota" --exclude="${data_path##*/}/cache" --exclude="${data_path##*/}/lib" -cpf - -C "${data_path%/*}" "${data_path##*/}" 2>/dev/null | pv >"$Backup_folder/$1.tar" ;; - zstd|Zstd|ZSTD) tar --exclude="${data_path##*/}/.ota" --exclude="${data_path##*/}/cache" --exclude="${data_path##*/}/lib" -cpf - -C "${data_path%/*}" "${data_path##*/}" 2>/dev/null | pv | zstd -r -T0 --ultra -6 -q >"$Backup_folder/$1.tar.zst" ;; - lz4|Lz4|LZ4) tar --exclude="${data_path##*/}/.ota" --exclude="${data_path##*/}/cache" --exclude="${data_path##*/}/lib" -cpf - -C "${data_path%/*}" "${data_path##*/}" 2>/dev/null | pv | lz4 -1 >"$Backup_folder/$1.tar.lz4" ;; + tar|Tar|TAR) tar --exclude="${data_path##*/}/.ota" --exclude="${data_path##*/}/cache" --exclude="${data_path##*/}/lib" -cpf - -C "${data_path%/*}" "${data_path##*/}" 2>/dev/null | pv -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f >"$Backup_folder/$1.tar" ;; + zstd|Zstd|ZSTD) tar --exclude="${data_path##*/}/.ota" --exclude="${data_path##*/}/cache" --exclude="${data_path##*/}/lib" -cpf - -C "${data_path%/*}" "${data_path##*/}" 2>/dev/null | pv -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f | zstd -r -T0 --ultra -6 -q >"$Backup_folder/$1.tar.zst" ;; + lz4|Lz4|LZ4) tar --exclude="${data_path##*/}/.ota" --exclude="${data_path##*/}/cache" --exclude="${data_path##*/}/lib" -cpf - -C "${data_path%/*}" "${data_path##*/}" 2>/dev/null | pv -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f | lz4 -1 >"$Backup_folder/$1.tar.lz4" ;; esac ;; *) case $Compression_method in - tar|Tar|TAR) tar --exclude="Backup_"* --exclude="${data_path##*/}/cache" -cPpf - "$data_path" 2>/dev/null | pv >"$Backup_folder/$1.tar" ;; - zstd|Zstd|ZSTD) tar --exclude="Backup_"* --exclude="${data_path##*/}/cache" -cPpf - "$data_path" 2>/dev/null | pv | zstd -r -T0 --ultra -6 -q >"$Backup_folder/$1.tar.zst" ;; - lz4|Lz4|LZ4) tar --exclude="Backup_"* --exclude="${data_path##*/}/cache" -cPpf - "$data_path" 2>/dev/null | pv | lz4 -1 >"$Backup_folder/$1.tar.lz4" ;; + tar|Tar|TAR) tar --exclude="Backup_"* --exclude="${data_path##*/}/cache" -cPpf - "$data_path" 2>/dev/null | pv -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f >"$Backup_folder/$1.tar" ;; + zstd|Zstd|ZSTD) tar --exclude="Backup_"* --exclude="${data_path##*/}/cache" -cPpf - "$data_path" 2>/dev/null | pv -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f | zstd -r -T0 --ultra -6 -q >"$Backup_folder/$1.tar.zst" ;; + lz4|Lz4|LZ4) tar --exclude="Backup_"* --exclude="${data_path##*/}/cache" -cPpf - "$data_path" 2>/dev/null | pv -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f | lz4 -1 >"$Backup_folder/$1.tar.lz4" ;; esac ; [[ $Compression_method1 != "" ]] && Compression_method="$Compression_method1" ; unset Compression_method1 ;; esac echo_log "備份$1數據" @@ -194,13 +209,13 @@ Backup_data() { fi } [[ $Lo = true ]] && { -echoRgb "選擇是否只備份split apk(分割apk檔)\n 如果你不知道這意味什麼請選擇音量下進行混合備份\n 音量上是,音量下不是" +echoRgb "選擇是否只備份split apk(分割apk檔)\n -如果你不知道這意味什麼請選擇音量下進行混合備份\n 音量上是,音量下不是" get_version "是" "不是,混合備份" && Splist="$branch" -echoRgb "是否備份外部數據 即比如原神的數據包\n 音量上備份,音量下不備份" +echoRgb "是否備份外部數據 即比如原神的數據包\n -音量上備份,音量下不備份" get_version "備份" "不備份" && Backup_obb_data="$branch" -echoRgb "是否備份使用者數據\n 音量上備份,音量下不備份" +echoRgb "是否備份使用者數據\n -音量上備份,音量下不備份" get_version "備份" "不備份" && Backup_user_data="$branch" -echoRgb "全部應用備份結束後是否備份自定義目錄\n 音量上備份,音量下不備份" +echoRgb "全部應用備份結束後是否備份自定義目錄\n -音量上備份,音量下不備份" get_version "備份" "不備份" && backup_media="$branch" } #開始循環$txt內的資料進行備份 @@ -236,12 +251,13 @@ while [[ $i -le $r ]]; do [[ -f $app_details ]] && . "$app_details" fi fi - lxj="$(df -h "$data" | awk 'END{print $4}' | sed 's/%//g')" + Occupation_status="$(df -h "$data" | cut -f3 -d 'use' | cut -f1 -d '%')%" + lxj="$(echo "$Occupation_status" | awk '{print $5}' | sed 's/%//g')" [[ $hx = USB && $PT = "" ]] && echoRgb "隨身碟意外斷開 請檢查穩定性" "0" && exit 1 starttime2="$(date -u "+%s")" echoRgb "備份$name1 ($name2)" - [[ $name2 = com.tencent.mobileqq ]] && echo "QQ可能恢復備份失敗或是丟失聊天記錄,請自行用你信賴的應用備份" - [[ $name2 = com.tencent.mm ]] && echo "WX可能恢復備份失敗或是丟失聊天記錄,請自行用你信賴的應用備份" + [[ $name2 = com.tencent.mobileqq ]] && echoRgb "QQ可能恢復備份失敗或是丟失聊天記錄,請自行用你信賴的應用備份" "0" + [[ $name2 = com.tencent.mm ]] && echoRgb "WX可能恢復備份失敗或是丟失聊天記錄,請自行用你信賴的應用備份" "0" unset nobackup apk_number="$(echo "$apk_path" | wc -l)" if [[ $apk_number = 1 ]]; then @@ -265,7 +281,7 @@ while [[ $i -le $r ]]; do [[ $name2 = github.tornaco.android.thanos ]] && Backup_data "thanox" "$(find "/data/system" -name "thanos*" -maxdepth 1 -type d)" fi endtime 2 "$name1備份" - echoRgb "完成$((i*100/r))% $hx$(df -h "$data" | awk 'END{print "剩餘:"$3"使用率:"$4}')" + echoRgb "完成$((i*100/r))% $hx$(echo "$Occupation_status" | awk 'END{print "剩餘:"$4"使用率:"$5}')" echoRgb "____________________________________" "3" else echoRgb "$name1[$name2]不在安裝列表,備份個寂寞?" "0" @@ -287,7 +303,8 @@ while [[ $i -le $r ]]; do echoRgb "備份第$A/$B個資料夾 剩下$((B-A))個" starttime2="$(date -u "+%s")" Backup_data "${REPLY##*/}" "$REPLY" - endtime 2 "${REPLY##*/}備份" && echoRgb "完成$((A*100/B))% $hx$(df -h "$data" | awk 'END{print "剩餘:"$3"使用率:"$4}')" && echoRgb "____________________________________" "3" && let A++ + endtime 2 "${REPLY##*/}備份" + echoRgb "完成$((A*100/B))% $hx$(echo "$Occupation_status" | awk 'END{print "剩餘:"$4"使用率:"$5}')" && echoRgb "____________________________________" "3" && let A++ done endtime 1 "自定義備份" else @@ -319,4 +336,4 @@ endtime 1 "批量備份開始到結束" longToast "批量備份完成" Print "批量備份完成 執行過程請查看$Status_log" exit 0 -}& \ No newline at end of file +} \ No newline at end of file diff --git a/tools/bin/bin.sh b/tools/bin/bin.sh index 0cadc54..18bdf05 100644 --- a/tools/bin/bin.sh +++ b/tools/bin/bin.sh @@ -19,26 +19,21 @@ if [[ -d $(magisk --path 2>/dev/null) ]]; then else echo "Magisk busybox Path does not exist" fi ; export PATH="$PATH" -backup_version="V13.1" +backup_version="V13.4" #設置二進制命令目錄位置 [[ $bin_path = "" ]] && echo "未正確指定bin.sh位置" && exit 2 #bin_path="${bin_path/'/storage/emulated/'/'/data/media/'}" Status_log="$MODDIR/Log.txt" rm -rf "$Status_log" filepath="/data/backup_tools" -case $MODDIR in -/data/user/0/com.xayah.databackup*) - if [[ -d /data/user/0/com.xayah.databackup ]]; then - filepath="/data/user/0/com.xayah.databackup/backup_tools" - echo "於com.xayah.databackup內執行" - fi ;; -esac +if [[ $APP_ENV = 1 ]]; then + filepath="/data/user/0/com.xayah.databackup/backup_tools" +fi busybox="$filepath/busybox" busybox2="$bin_path/busybox" #排除自身 exclude=" -json -.doh +update busybox_path update bin.sh" @@ -168,9 +163,10 @@ echo_log() { echoRgb "$1失敗,過世了" "0" ; Print "$1失敗,過世了" ; result=1 fi } -Open_apps="$(appinfo -o ands -ta c)" +Open_apps="$(appinfo -d "(" -ed ")" -o ands,pn -ta c)" +Open_apps2="$(echo "$Open_apps" | cut -f2 -d '(' | sed 's/)//g')" bn=147 -echoRgb "\n --------------script_backup--------------\n -當前腳本執行路徑:$MODDIR\n -busybox路徑:$(which busybox)\n -busybox版本:$(busybox | head -1 | awk '{print $2}')\n -appinfo版本:$(appinfo --version)\n -腳本版本:$backup_version\n -設備架構:$abi\n -品牌:$(getprop ro.product.brand)\n -設備代號:$(getprop ro.product.device)\n -型號:$(getprop ro.product.model)\n -Android版本:$(getprop ro.build.version.release)\n -SDK:$(getprop ro.build.version.sdk)\n -終端:$Open_apps" +echoRgb "\n --------------###############--------------\n -當前腳本執行路徑:$MODDIR\n -busybox路徑:$(which busybox)\n -busybox版本:$(busybox | head -1 | awk '{print $2}')\n -appinfo版本:$(appinfo --version)\n -腳本版本:$backup_version\n -設備架構:$abi\n -品牌:$(getprop ro.product.brand)\n -設備代號:$(getprop ro.product.device)\n -型號:$(getprop ro.product.model)\n -Android版本:$(getprop ro.build.version.release)\n -SDK:$(getprop ro.build.version.sdk)\n -終端:$Open_apps" bn=195 if [[ $script != "" ]]; then if [[ ! -f $TMPDIR/scriptTMP ]]; then @@ -193,55 +189,59 @@ if [[ $(pm path ice.message) = "" ]]; then fi #sed -r -n 's/.*"tag_name": *"(.*)".*/\1/p' #sed -r -n 's/.*"browser_download_url": *"(.*-linux64\..*\.so\.bz2)".*/\1/p' -LANG="$(getprop "persist.sys.locale")" -zippath="$(find "$MODDIR" -maxdepth 1 -name "*.zip" -type f)" -echoRgb "檢查更新中 請稍後......." -Language="https://api.github.com/repos/Petit-Abba/backup_script_zh-CN/releases/latest" -if [[ $LANG != "" ]]; then - case $LANG in - *-TW|*-tw) - echoRgb "系統語系:繁體中文" - Language="https://api.github.com/repos/YAWAsau/backup_script/releases/latest" ;; - *-CN|*-cn) - echoRgb "系統語系:簡體中文" ;; - * ) - echoRgb "$LANG不支持 默認簡體中文" "0" ;; - esac -else - echoRgb "獲取系統語系失敗 默認簡體中文" "0" -fi -#dns="1.1.1.1,1.0.0.1" -dns="8.8.8.8" -#dns="114.114.114.114" -# Curl uses boringssl - first appeared in Marshmallow - don't try using ssl in older android versions -[[ $(getprop ro.build.version.sdk) -lt 23 ]] && alias curl="curl -kL --dns-servers $dns$flag" || alias curl="curl -L --dns-servers $dns$flag" -echoRgb "DNS:$dns" -json="$(curl "$Language" 2>/dev/null)" -if [[ $json != "" ]]; then - echoRgb "使用curl" -else - json="$(down -s -L "$Language" 2>/dev/null)" - [[ $json != "" ]] && echoRgb "使用down" -fi -if [[ $json != "" ]]; then - tag="$(echo "$json" | sed -r -n 's/.*"tag_name": *"(.*)".*/\1/p')" - if [[ $backup_version != $tag ]]; then - echoRgb "發現新版本 從GitHub更新 版本:$tag\n -更新日誌:\n$(curl "https://api.github.com/repos/YAWAsau/backup_script/releases/latest" 2>/dev/null | sed -r -n 's/.*"body": *"(.*)".*/\1/p' || down -s -L "https://api.github.com/repos/YAWAsau/backup_script/releases/latest" 2>/dev/null | sed -r -n 's/.*"body": *"(.*)".*/\1/p')" - download="$(echo "$json" | sed -r -n 's/.*"browser_download_url": *"(.*.zip)".*/\1/p')" - curl -O "https://gh.api.99988866.xyz/$download" || down -s -L -o "$MODDIR/$tag.zip" "https://gh.api.99988866.xyz/$download" - echo_log "下載${download##*/}" - if [[ $result = 0 ]]; then - echoRgb "update $backup_version > $tag" - zippath="$(find "$MODDIR" -maxdepth 1 -name "*.zip" -type f)" - GitHub="true" +if [[ -e $bin_path/update ]]; then + LANG="$(getprop "persist.sys.locale")" + zippath="$(find "$MODDIR" -maxdepth 1 -name "*.zip" -type f)" + echoRgb "檢查更新中 請稍後......." + Language="https://api.github.com/repos/Petit-Abba/backup_script_zh-CN/releases/latest" + if [[ $LANG != "" ]]; then + case $LANG in + *-TW|*-tw) + echoRgb "系統語系:繁體中文" + Language="https://api.github.com/repos/YAWAsau/backup_script/releases/latest" ;; + *-CN|*-cn) + echoRgb "系統語系:簡體中文" ;; + * ) + echoRgb "$LANG不支持 默認簡體中文" "0" ;; + esac + else + echoRgb "獲取系統語系失敗 默認簡體中文" "0" + fi + #dns="1.1.1.1,1.0.0.1" + dns="8.8.8.8" + #dns="114.114.114.114" + # Curl uses boringssl - first appeared in Marshmallow - don't try using ssl in older android versions + [[ $(getprop ro.build.version.sdk) -lt 23 ]] && alias curl="curl -kL --dns-servers $dns$flag" || alias curl="curl -L --dns-servers $dns$flag" + echoRgb "DNS:$dns" + json="$(curl "$Language" 2>/dev/null)" + if [[ $json != "" ]]; then + echoRgb "使用curl" + else + json="$(down -s -L "$Language" 2>/dev/null)" + [[ $json != "" ]] && echoRgb "使用down" + fi + if [[ $json != "" ]]; then + tag="$(echo "$json" | sed -r -n 's/.*"tag_name": *"(.*)".*/\1/p')" + if [[ $backup_version != $tag ]]; then + echoRgb "發現新版本 從GitHub更新 版本:$tag\n -更新日誌:\n$(curl "https://api.github.com/repos/YAWAsau/backup_script/releases/latest" 2>/dev/null | sed -r -n 's/.*"body": *"(.*)".*/\1/p' || down -s -L "https://api.github.com/repos/YAWAsau/backup_script/releases/latest" 2>/dev/null | sed -r -n 's/.*"body": *"(.*)".*/\1/p')" + download="$(echo "$json" | sed -r -n 's/.*"browser_download_url": *"(.*.zip)".*/\1/p')" + curl -O "https://gh.api.99988866.xyz/$download" || down -s -L -o "$MODDIR/$tag.zip" "https://gh.api.99988866.xyz/$download" + echo_log "下載${download##*/}" + if [[ $result = 0 ]]; then + echoRgb "update $backup_version > $tag" + zippath="$(find "$MODDIR" -maxdepth 1 -name "*.zip" -type f)" + GitHub="true" + else + echoRgb "請手動將備份腳本壓縮包放置在\n -$MODDIR後再次執行腳本進行更新" "0" + fi else - echoRgb "請手動將備份腳本壓縮包放置在\n -$MODDIR後再次執行腳本進行更新" "0" + echoRgb "本地版本:$backup_version 線上版本:$tag 版本一致無須更新" fi else - echoRgb "本地版本:$backup_version 線上版本:$tag 版本一致無須更新" + echoRgb "更新獲取失敗" "0" fi else - echoRgb "更新獲取失敗" "0" + echoRgb "自動更新未開啟" "0" fi if [[ $zippath != "" ]]; then case $(echo "$zippath" | wc -l) in diff --git a/tools/bin/update b/tools/bin/update new file mode 100644 index 0000000..e69de29 diff --git a/tools/script/Get_DirName b/tools/script/Get_DirName index 0b9c1ff..d704988 100644 --- a/tools/script/Get_DirName +++ b/tools/script/Get_DirName @@ -4,7 +4,7 @@ tools_path="$MODDIR/tools" bin_path="$MODDIR/tools/bin" [[ ! -d $tools_path ]] && echo "$tools_path目錄遺失" && exit 1 [[ ! -d $bin_path ]] && echo "$bin_path目錄遺失" && exit 1 -txt="$MODDIR/應用列表.txt" +txt="$MODDIR/appList.txt" txt="${txt/'/storage/emulated/'/'/data/media/'}" . "$bin_path/bin.sh" echo "#不需要恢復還原的應用請在開頭注釋# 比如#xxxxxxxx 酷安">"$txt" diff --git a/tools/script/delete_backup b/tools/script/delete_backup index 2e51cd1..b02911d 100644 --- a/tools/script/delete_backup +++ b/tools/script/delete_backup @@ -3,6 +3,7 @@ tools_path="$MODDIR/tools" bin_path="$tools_path/bin" [[ ! -d $tools_path ]] && echo "$tools_path目錄遺失" && exit 1 . "$bin_path/bin.sh" +echoRgb "警告 此腳本將刪除任何未被安裝的應用備份\n -你的備份將一去不復返,10秒內退出腳本還有生還機會" "0" && sleep 10 find "$MODDIR" -maxdepth 2 -type d | sort | while read; do if [[ -f $REPLY/app_details ]]; then unset PackageName