This commit is contained in:
YAWAsau
2022-01-23 18:02:55 +08:00
parent 28b6b2adff
commit a9ef4d985c
5 changed files with 390 additions and 186 deletions

7
backup_media.sh Normal file
View File

@@ -0,0 +1,7 @@
if [ -f "${0%/*}/tools/bin/tools.sh" ]; then
MODDIR="${0%/*}"
operate="backup_media"
. "${0%/*}/tools/bin/tools.sh"
else
echo "${0%/*}/tools/bin/tools.sh遗失"
fi

View File

@@ -6,6 +6,9 @@ Lo=0
#自定義備份目錄輸出位置 (忽略為空將默認腳本路徑中)
Output_path=
#Getlist.sh列出系統應用
system_name=1
#假設如果存在usb隨身碟是否默認使用隨身碟(1不詢問默認使用 0每次都進行詢問)
USBdefault=0

View File

@@ -119,9 +119,9 @@ echoRgb() {
elif [[ $2 = 1 ]]; then
echo -e "\e[38;5;121m -$1\e[0m"
elif [[ $2 = 2 ]]; then
echo -e "\e[38;5;223m -$1\e[0m"
echo -e "\e[38;5;218m -$1\e[0m"
elif [[ $2 = 3 ]]; then
echo -e "\e[38;5;220m -$1\e[0m"
echo -e "\e[38;5;183m -$1\e[0m"
else
echo -e "\e[38;5;${bn}m -$1\e[0m"
fi
@@ -194,7 +194,7 @@ fi
#-閃存顆粒:$UFS_MODEL $Particles
Open_apps="$(appinfo -d "(" -ed ")" -o ands,pn -ta c)"
Open_apps2="$(echo "$Open_apps" | cut -f2 -d '(' | sed 's/)//g')"
bn=214
bn=218
echoRgb "\n --------------###############--------------\n -當前腳本執行路徑:$MODDIR\n -busybox路徑:$(which busybox)\n -busybox版本:$(busybox | head -1 | awk '{print $2}')\n -appinfo版本:$(appinfo --version)\n -腳本版本:$backup_version\n -Magisk版本:$(cat "/data/adb/magisk/util_functions.sh" 2>/dev/null | grep "MAGISK_VER_CODE" | cut -f2 -d '=')\n -設備架構:$abi\n -品牌:$(getprop ro.product.brand 2>/dev/null)\n -設備代號:$(getprop ro.product.device 2>/dev/null)\n -型號:$(getprop ro.product.model 2>/dev/null)-$(getprop ro.serialno 2>/dev/null)\n -RAM:$(cat /proc/meminfo 2>/dev/null | head -n 1 | awk '{print $2/1000"MB"}' 2>/dev/null)\n -閃存類型:$ROM_TYPE\n -閃存顆粒:$UFS_MODEL $Particles\n -Android版本:$(getprop ro.build.version.release 2>/dev/null)\n -SDK:$(getprop ro.build.version.sdk 2>/dev/null)\n -終端:$Open_apps"
bn=117
if [[ $(pm path ice.message) = "" ]]; then

View File

@@ -79,6 +79,13 @@ backup)
fi
done
echo "$(cat "$txt" | sed -e '/^$/d')" >"$txt"
if [[ -f $MODDIR/systemList.txt ]]; then
cat "$txt" >"$TMPDIR/applist" && cat "$MODDIR/systemList.txt" >>"$TMPDIR/applist"
[[ -f $TMPDIR/applist ]] && txt="$TMPDIR/applist"
echoRgb "列表內包含系統應用 針對系統應用僅備份數據不備份apk" "2"
else
echoRgb "僅第三方應用" "2"
fi
fi
r="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n '$=')"
[[ $r = "" ]] && echoRgb "爬..appList.txt是空的或是包名被注釋了這樣備份個鬼" "0" && exit 1
@@ -161,6 +168,8 @@ backup)
result=0
echoRgb "Apk版本無更新 跳過備份" "2"
else
[[ $(cat "$txt2" | grep -v "#" | sed -e '/^$/d' | awk '{print $2}' | grep -w "^${name2}$" | head -1) = "" ]] && echo "${Backup_folder##*/} $name2 $name3" >>"$txt2"
if [[ $name3 != system ]]; then
case $name2 in
com.google.android.youtube)
[[ -d /data/adb/Vanced ]] && nobackup="true"
@@ -172,7 +181,6 @@ backup)
if [[ $nobackup != true ]]; then
partition_info
[[ $lxj -ge 95 ]] && echoRgb "$hx空間不足,達到$lxj%" "0" && exit 2
[[ $(cat "$txt2" | grep -v "#" | sed -e '/^$/d' | awk '{print $2}' | grep -w "^${name2}$" | head -1) = "" ]] && echo "${Backup_folder##*/} $name2" >>"$txt2"
rm -rf "$Backup_folder"/*.apk
#備份apk
echoRgb "$1"
@@ -198,6 +206,7 @@ backup)
echo "apk_version=\"$(dumpsys package "$name2" | awk '/versionName=/{print $1}' | cut -f2 -d '=' | head -1)\"" >>"$app_details"
[[ $PackageName = "" ]] && echo "PackageName=\"$name2\"" >>"$app_details"
[[ $ChineseName = "" ]] && echo "ChineseName=\"$name1\"" >>"$app_details"
[[ $type = "" ]] && echo "type=\"$name3\"" >>"$app_details"
[[ ! -f $Backup_folder/Restorebackup.sh ]] && cp -r "$script_path/restore2" "$Backup_folder/Restorebackup.sh"
fi
if [[ $name2 = com.android.chrome ]]; then
@@ -214,6 +223,13 @@ backup)
else
echoRgb "$name不支持備份 需要使用vanced安裝" "0" && rm -rf "$Backup_folder"
fi
else
echoRgb "$name2為系統應用不備份apk" "3" && result="0"
[[ $PackageName = "" ]] && echo "PackageName=\"$name2\"" >>"$app_details"
[[ $ChineseName = "" ]] && echo "ChineseName=\"$name1\"" >>"$app_details"
[[ $type = "" ]] && echo "type=\"$name3\"" >>"$app_details"
[[ ! -f $Backup_folder/Restorebackup.sh ]] && cp -r "$script_path/restore2" "$Backup_folder/Restorebackup.sh"
fi
fi
[[ $name2 = bin.mt.plus && ! -f $Backup/$name1.apk ]] && cp -r "$apk_path" "$Backup/$name1.apk"
D=1
@@ -286,16 +302,17 @@ backup)
{
while [[ $i -le $r ]]; do
[[ $en -ge 229 ]] && en=118
unset name1 name2 apk_path apk_path2
unset name1 name2 apk_path apk_path2 result
name1="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
name2="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
name3="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $3}')"
[[ $name2 = "" ]] && echoRgb "警告! appList.txt應用包名獲取失敗可能修改有問題" "0" && exit 1
apk_path="$(pm path "$name2" | cut -f2 -d ':')"
apk_path2="$(echo "$apk_path" | head -1)"
apk_path2="${apk_path2%/*}"
if [[ -d $apk_path2 ]]; then
echoRgb "備份第$i/$r個應用 剩下$((r - i))" "3"
unset ChineseName PackageName nobackup No_backupdata
unset ChineseName PackageName nobackup No_backupdata result type
if [[ $name1 = *! || $name1 = * ]]; then
name1="$(echo "$name1" | sed 's/!//g ; s///g')"
echoRgb "跳過備份$name1 所有數據" "0"
@@ -306,7 +323,7 @@ backup)
if [[ -f $app_details ]]; then
. "$app_details"
if [[ $PackageName != $name2 ]]; then
unset userSize ChineseName PackageName apk_version
unset userSize ChineseName PackageName apk_version type result
Backup_folder="$Backup/${name1}[${name2}]"
app_details="$Backup_folder/app_details"
[[ -f $app_details ]] && . "$app_details"
@@ -356,14 +373,16 @@ backup)
echoRgb "備份結束,備份多媒體" "1"
starttime1="$(date -u "+%s")"
Backup_folder="$Backup/Media"
[[ ! -f $Backup/Restoremedia.sh ]] && cp -r "$script_path/restore3" "$Backup/Restoremedia.sh"
[[ ! -d $Backup_folder ]] && mkdir -p "$Backup_folder"
[[ ! -f $Backup_folder/恢復多媒體數據.sh ]] && cp -r "$script_path/restore3" "$Backup_folder/恢復多媒體數據.sh"
app_details="$Backup_folder/app_details"
[[ -f $app_details ]] && . "$app_details"
[[ ! -f $Backup/mediaList.txt ]] && echo "#不需要恢復的資料夾請在開頭注釋# 比如#媒體" > "$Backup/mediaList.txt"
echo "$Custom_path" | grep -v "#" | sed -e '/^$/d' | while read; do
echoRgb "備份第$A/$B個資料夾 剩下$((B - A))" "3"
starttime2="$(date -u "+%s")"
Backup_data "${REPLY##*/}" "$REPLY"
[[ $result = 0 ]] && echo "${REPLY##*/}.tar" >> "$Backup/mediaList.txt"
endtime 2 "${REPLY##*/}備份" "1"
echoRgb "完成$((A * 100 / B))% $hx$(echo "$Occupation_status" | awk 'END{print "剩餘:"$1"使用率:"$2}')" "2" && echoRgb "____________________________________" && let A++
done
@@ -403,15 +422,23 @@ backup)
;;
dumpname)
txt="$MODDIR/appList.txt"
txt2="$MODDIR/mediaList.txt"
txt="${txt/'/storage/emulated/'/'/data/media/'}"
echoRgb "列出全部資料夾內應用名與自定義目錄壓縮包名稱" "3"
echo "#不需要恢復還原的應用請在開頭注釋# 比如#xxxxxxxx 酷安" >"$txt"
echo "#不需要恢復的資料夾請在開頭注釋# 比如#媒體" > "$txt2"
find "$MODDIR" -maxdepth 1 -type d | sort | while read; do
if [[ -f $REPLY/app_details ]]; then
if [[ ${REPLY##*/} = Media ]]; then
echoRgb "存在媒體資料夾" "2"
find "$REPLY" -maxdepth 1 -name "*.tar*" -type f | while read; do
echo "${REPLY##*/}" >> "$txt2"
done
echoRgb "$txt2重新生成" "1"
fi
unset PackageName
. "$REPLY/app_details"
if [[ $PackageName != "" ]]; then
echo "${REPLY##*/} $PackageName" >>"$txt"
fi
[[ $PackageName != "" ]] && echo "${REPLY##*/} $PackageName $type" >>"$txt"
fi
done
echoRgb "$txt重新生成" "1"
@@ -432,7 +459,7 @@ Restore)
txt="$MODDIR/appList.txt"
[[ ! -f $txt ]] && echoRgb "請執行\"DumpName.sh\"獲取應用列表再來恢復" "0" && exit 2
r="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n '$=')"
[[ $r = "" ]] && echoRgb "appList.txt包名為空或是被注釋了" "0" && exit 1
[[ $r = "" ]] && echoRgb "appList.txt包名為空或是被注釋了\n -請執行\"DumpName.sh\"獲取應用列表再來恢復" "0" && exit 1
[[ $(which restorecon) = "" ]] && echoRgb "restorecon命令不存在" "0" && exit 1
#顯示執行結果
Release_data() {
@@ -532,6 +559,7 @@ Restore)
echoRgb "恢複第$i/$r個應用 剩下$((r - i))" "3"
name1="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
name2="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
name3="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $3}')"
unset No_backupdata
if [[ $name1 = *! || $name1 = * ]]; then
name1="$(echo "$name1" | sed 's/!//g ; s///g')"
@@ -544,6 +572,7 @@ Restore)
if [[ -d $Backup_folder ]]; then
echoRgb "恢複$name1 ($name2)"
starttime2="$(date -u "+%s")"
if [[ $name3 != system ]]; then
if [[ $(pm path "$name2") = "" ]]; then
apkfile="$(find "$Backup_folder" -maxdepth 1 -name "apk.*" -type f 2>/dev/null)"
if [[ $apkfile != "" ]]; then
@@ -590,6 +619,9 @@ Restore)
else
echoRgb "存在當前系統中略過安裝Apk" "2"
fi
else
echoRgb "$name2是系統應用" "3"
fi
if [[ $No_backupdata = "" ]]; then
if [[ $(pm path "$name2") != "" ]]; then
#停止應用
@@ -661,8 +693,11 @@ Restore2)
[[ $name = "" ]] && echoRgb "包名獲取失敗" "0" && exit 2
name2="$ChineseName"
[[ $name2 = "" ]] && echoRgb "應用名獲取失敗" "0" && exit 2
name3="$type"
[[ $name3 = "" ]] && echoRgb "應用類型獲取失敗" "0" && exit 2
echoRgb "恢複$name2 ($name)" "3"
starttime2="$(date -u "+%s")"
if [[ $name3 != "" ]]; then
if [[ $(pm path "$name") = "" ]]; then
apkfile="$(find "$Backup_folder" -maxdepth 1 -name "apk.*" -type f 2>/dev/null)"
if [[ $apkfile != "" ]]; then
@@ -709,6 +744,9 @@ Restore2)
else
echoRgb "存在當前系統中略過安裝Apk" "2"
fi
else
echoRgb "$name2是系統應用" "3"
fi
if [[ $(pm path "$name") != "" ]]; then
#停止應用
[[ $name != $Open_apps2 ]] && am force-stop "$name"
@@ -789,7 +827,12 @@ Restore2)
wait && exit
;;
Restore3)
app_details="$MODDIR/app_details"
echoRgb "點錯了?這是恢復自定義資料夾腳本 如果你是要恢復應用那你就點錯了\n -音量上繼續恢復自定義資料夾,音量下離開腳本" "2"
get_version "恢復自定義資料夾" "離開腳本" && [[ "$branch" = false ]] && exit 0
mediaDir="$MODDIR/Media"
[[ ! -d $mediaDir ]] && echoRgb "媒體資料夾不存在" "0" && exit 2
txt="$MODDIR/mediaList.txt"
[[ ! -f $txt ]] && echoRgb "請執行\"DumpName.sh\"獲取媒體列表再來恢復" "0" && exit 2
#記錄開始時間
starttime1="$(date -u "+%s")"
echo_log() {
@@ -801,31 +844,32 @@ Restore3)
}
Release_data() {
tar_path="$1"
if [[ -f $tar_path ]]; then
FILE_NAME="${tar_path##*/}"
FILE_NAME2="${FILE_NAME%%.*}"
echoRgb "恢復$FILE_NAME2數據" "3" && usertar="1"
case ${FILE_NAME##*.} in
lz4)
pv "$1" | tar -I lz4 -xPpf -
Set_back
;;
zst) pv "$1" | tar -I zstd -xPpf - ;;
tar) pv "$1" | tar -xPpf - ;;
*) (
echoRgb "恢復$FILE_NAME2數據" "3"
if [[ ${FILE_NAME##*.} = tar ]]; then
pv "$1" | tar -xPpf -
else
echoRgb "$FILE_NAME 壓縮包不支持解壓縮" "0"
Set_back
) ;;
esac
fi
echo_log "$FILE_NAME 解壓縮($FILE_NAME2)"
app_details="$mediaDir/app_details"
[[ $result = 0 ]] && [[ -f $app_details ]] && echoRgb "解壓路徑↓\n -$(cat "$app_details" | awk "/${FILE_NAME2}path/"'{print $1}' | cut -f2 -d '=' | tail -n1 | sed 's/\"//g')" "2"
else
echoRgb "$tar_path壓縮包不存在" "0"
fi
}
starttime1="$(date -u "+%s")"
A=1
B="$(find "$MODDIR" -maxdepth 1 -name "*.tar*" -type f | wc -l)"
find "$MODDIR" -maxdepth 1 -name "*.tar*" -type f | while read; do
B="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n '$=')"
[[ $B = "" ]] && echoRgb "mediaList.txt壓縮包名為空或是被注釋了\n -請執行\"DumpName.sh\"獲取列表再來恢復" "0" && exit 1
while [[ $A -le $B ]]; do
name1="$(cat "$txt" | grep -v "#" | sed -e '/^$/d' | sed -n "${A}p" | awk '{print $1}')"
starttime2="$(date -u "+%s")"
echoRgb "恢復第$A/$B個壓縮包 剩下$((B - A))" "3"
Release_data "$REPLY"
Release_data "$mediaDir/$name1"
endtime 2 "$FILE_NAME2恢複" "2" && echoRgb "完成$((A * 100 / B))%" "3" && echoRgb "____________________________________" && let A++
done
endtime 1 "恢複結束"
@@ -850,16 +894,47 @@ com.android.chrome"
nametxt="$txtpath/appList.txt"
[[ ! -e $nametxt ]] && echo '#不需要備份的應用請在開頭注釋# 比如#酷安 xxxxxxxx\n#不需要備份數據比如酷安! xxxxxxxx應用名後方加一個驚嘆號即可 注意是應用名不是包名' >"$nametxt"
echo >>"$nametxt"
isBoolean "$Lo" "LO" && Lo="$nsx"
if [[ $Lo = false ]]; then
isBoolean "$system_name" "system_name" && system_name="$nsx"
else
echoRgb "列出系統應用?\n -音量上列出,音量下不列出" "2"
get_version "列出" "不列出" && system_name="$branch"
fi
echoRgb "請勿關閉腳本,等待提示結束"
bn=118
rm -rf "$MODDIR/tmp"
starttime1="$(date -u "+%s")"
echoRgb "提示!因為系統自帶app(位於data分區或是可卸載預裝應用)備份恢復可能存在問題\n -所以不會輸出..但是檢測為Xposed類型包名將輸出\n -如果提示不是Xposed但他就是Xposed可能為此應用元數據不符合規範導致" "0"
xposed_name="$(appinfo -o pn -xm)"
#appinfo -o pn -pn $system $launcher_app -3 | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u>>k
Apk_info="$(appinfo -sort-i -d " " -o ands,pn -pn $system $launcher_app -3 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
Apk_Quantity="$(echo "$Apk_info" | wc -l)"
LR="1"
if [[ $system_name = true ]]; then
echoRgb "第三方+系統應用\n -列出系統應用....." "2"
echoRgb "警告!系統應用將不備份apk僅備份數據\n -請勿跨系統恢復防止出現問題,原生系統則不受此限制\n -另外腳本會自動檢測系統應用是否存在,負責不進行數據恢復" "0"
nametxt2="$txtpath/systemList.txt"
Apk_info2="$(appinfo -sort-i -d " " -o ands,pn -s 2>/dev/null | egrep -v "$(echo $system | sed 's/ /\|/g')")"
Apk_Quantity2="$(echo "$Apk_info2" | wc -l)"
echo "$Apk_info2" | sed 's/\///g ; s/\://g ; s/(//g ; s/)//g ; s/\[//g ; s/\]//g ; s/\-//g ; s/!//g' | while read; do
[[ $bn -ge 229 ]] && bn=118
app_1=($REPLY $REPLY)
[[ $i = "" ]] && i="0"
[[ $Q = "" ]] && Q="0"
if [[ $(cat "$nametxt2" 2>/dev/null | cut -f2 -d ' ' | egrep "^${app_1[1]}$") != ${app_1[1]} ]]; then
echo "$REPLY system" >>"$nametxt2" && [[ ! -e $MODDIR/tmp ]] && touch "$MODDIR/tmp"
echoRgb "$REPLY($bn)"
let i++
else
let Q++
fi
[[ $LR = $Apk_Quantity2 ]] && [[ -e $MODDIR/tmp ]] && echoRgb "\n -系統apk數量=\"$Apk_Quantity2\"\n -存在列表中=\"$Q\"\n -輸出=\"$i\"" && LR="1"
let bn++ LR++
done
else
echoRgb "僅第三方" "2"
fi
echoRgb "列出第三方應用......." "2"
echo "$Apk_info" | sed 's/\///g ; s/\://g ; s/(//g ; s/)//g ; s/\[//g ; s/\]//g ; s/\-//g ; s/!//g' | while read; do
[[ $bn -ge 229 ]] && bn=118
app_1=($REPLY $REPLY)
@@ -872,7 +947,7 @@ com.android.chrome"
*oneplus* | *miui* | *xiaomi* | *oppo* | *flyme* | *meizu* | com.android.soundrecorder | com.mfashiongallery.emag | com.mi.health | *coloros*)
if [[ $(echo "$xposed_name" | grep -w "${app_1[1]}") = ${app_1[1]} ]]; then
echoRgb "${app_1[2]}為Xposed模塊 進行添加" "0"
echo "$REPLY" >>"$nametxt" && [[ ! -e $MODDIR/tmp ]] && touch "$MODDIR/tmp"
echo "$REPLY user" >>"$nametxt" && [[ ! -e $MODDIR/tmp ]] && touch "$MODDIR/tmp"
let i++ rd++
else
echoRgb "${app_1[2]}非Xposed模塊 忽略輸出" "0"
@@ -880,7 +955,7 @@ com.android.chrome"
fi
;;
*)
echo "$REPLY" >>"$nametxt" && [[ ! -e $MODDIR/tmp ]] && touch "$MODDIR/tmp"
echo "$REPLY user" >>"$nametxt" && [[ ! -e $MODDIR/tmp ]] && touch "$MODDIR/tmp"
echoRgb "$REPLY($bn)"
let i++
;;
@@ -889,7 +964,7 @@ com.android.chrome"
let Q++
fi
if [[ $LR = $Apk_Quantity ]]; then
[[ -e $MODDIR/tmp ]] && echoRgb "\n -apk數量=\"$Apk_Quantity\"\n -已過濾=\"$rc\"\n -xposed=\"$rd\"\n -存在列表中=\"$Q\"\n -輸出=\"$i\""
[[ -e $MODDIR/tmp ]] && echoRgb "\n -第三方apk數量=\"$Apk_Quantity\"\n -已過濾=\"$rc\"\n -xposed=\"$rd\"\n -存在列表中=\"$Q\"\n -輸出=\"$i\""
fi
let bn++ LR++
done
@@ -910,4 +985,123 @@ com.android.chrome"
[[ ! -e $MODDIR/tmp ]] && echoRgb "無新增應用" || echoRgb "輸出包名結束 請查看$nametxt"
rm -rf "$MODDIR/tmp"
;;
backup_media)
[[ ! -f $MODDIR/backup_settings.conf ]] && echo "backup_settings.conf配置遺失" && EXIT="true"
[[ $EXIT = true ]] && exit 1
. "$MODDIR/backup_settings.conf"
{
script="${0##*/}"
if [[ $script != "" ]]; then
pgrep -f "tar" | while read; do
kill -KILL " $REPLY" >/dev/null
done
fi
} &
PU="$(ls /dev/block/vold | grep public)"
if [[ $Output_path != "" ]]; then
[[ ${Output_path: -1} = / ]] && Output_path="${Output_path%?}"
Backup="$Output_path/Backup_$Compression_method"
outshow="使用自定義目錄"
else
if [[ $APP_ENV = 1 ]]; then
Backup="/storage/emulated/0/Backup_$Compression_method"
outshow="沒有設定備份目錄 使用默認路徑"
else
Backup="$MODDIR/Backup_$Compression_method"
outshow="使用當前路徑作為備份目錄"
fi
fi
if [[ $PU != "" ]]; then
[[ -f /proc/mounts ]] && PT="$(cat /proc/mounts | grep "$PU" | awk '{print $2}')"
if [[ -d $PT ]]; then
if [[ $(echo "$MODDIR" | grep -oE "^${PT}") != "" || $USBdefault = true ]]; then
hx="USB"
else
echoRgb "檢測到隨身碟 是否在隨身碟備份\n -音量上是,音量下不是" "2"
get_version "選擇了隨身碟備份" "選擇了本地備份"
[[ $branch = true ]] && hx="USB"
fi
if [[ $hx = USB ]]; then
Backup="$PT/Backup_$Compression_method"
data="/dev/block/vold/$PU"
mountinfo="$(df -T "${Backup%/*}" | sed -n 's|% /.*|%|p' | awk '{print $(NF-4)}')"
case $mountinfo in
vfat | fuseblk | exfat | NTFS | ext4 | f2fs)
outshow="於隨身碟備份"
;;
*)
echoRgb "隨身碟檔案系統$mountinfo不支持超過單檔4GB\n -請格式化為exfat" "0"
exit 1
;;
esac
fi
fi
else
echoRgb "沒有檢測到隨身碟於本地備份" "0"
fi
rm -rf "$Backup/STOP"
#分區詳細
if [[ $(echo "$Backup" | egrep -o "^/storage/emulated") != "" ]]; then
Backup_path="/data"
else
Backup_path="${Backup%/*}"
fi
echoRgb "$hx備份資料夾所使用分區統計如下↓\n -$(df -h "${Backup%/*}" | sed -n 's|% /.*|%|p' | awk '{print $(NF-3),$(NF-2),$(NF-1),$(NF)}' | sed 's/G//g' | awk 'END{print "總共:"$1"G已用:"$2"G剩餘:"$3"G使用率:"$4}')檔案系統:$(df -T "$Backup_path" | sed -n 's|% /.*|%|p' | awk '{print $(NF-4)}')\n -備份目錄輸出位置↓\n -$Backup"
echoRgb "$outshow" "2"
#分區佔用信息
partition_info() {
Occupation_status="$(df -h "${Backup%/*}" | sed -n 's|% /.*|%|p' | awk '{print $(NF-1),$(NF)}')"
lxj="$(echo "$Occupation_status" | awk '{print $2}' | sed 's/%//g')"
}
Backup_data() {
unset zsize
[[ -f $app_details ]] && Size="$(cat "$app_details" | awk "/$1Size/"'{print $1}' | cut -f2 -d '=' | tail -n1 | sed 's/\"//g')"
data_path="$2"
if [[ -d $data_path ]]; then
if [[ $Size != $(du -ks "$data_path" | awk '{print $1}') ]]; then
partition_info
[[ $lxj -ge 95 ]] && echoRgb "$hx空間不足,達到$lxj%" "0" && exit 2
echoRgb "備份$1數據"
tar --exclude="Backup_"* --exclude="${data_path##*/}/cache" -cPpf - "$data_path" 2>/dev/null | pv >"$Backup_folder/$1.tar"
echo_log "備份$1數據"
if [[ $result = 0 ]]; then
echo "#$1Size=\"$(du -ks "$data_path" | awk '{print $1}')\"" >>"$app_details"
[[ $2 != $(cat "$app_details" | awk "/$1path/"'{print $1}' | cut -f2 -d '=' | tail -n1 | sed 's/\"//g') ]] && echo "#$1path=\"$2\"" >>"$app_details"
fi
else
echoRgb "$1數據無發生變化 跳過備份" "2"
fi
else
if [[ -f $data_path ]]; then
echoRgb "$1是一個文件 不支持備份" "0"
else
echoRgb "$1數據不存在跳過備份" "2"
fi
fi
partition_info
}
A=1
B="$(echo "$Custom_path" | grep -v "#" | sed -e '/^$/d' | sed -n '$=')"
if [[ $B != "" ]]; then
starttime1="$(date -u "+%s")"
Backup_folder="$Backup/Media"
[[ ! -d $Backup_folder ]] && mkdir -p "$Backup_folder"
[[ ! -f $Backup/Restoremedia.sh ]] && cp -r "$script_path/restore3" "$Backup/Restoremedia.sh"
app_details="$Backup_folder/app_details"
[[ -f $app_details ]] && . "$app_details"
[[ ! -f $Backup/mediaList.txt ]] && echo "#不需要恢復的資料夾請在開頭注釋# 比如#媒體" > "$Backup/mediaList.txt"
echo "$Custom_path" | grep -v "#" | sed -e '/^$/d' | while read; do
echoRgb "備份第$A/$B個資料夾 剩下$((B - A))" "3"
starttime2="$(date -u "+%s")"
Backup_data "${REPLY##*/}" "$REPLY"
[[ $result = 0 ]] && echo "${REPLY##*/}" >> "$Backup/mediaList.txt"
endtime 2 "${REPLY##*/}備份" "1"
echoRgb "完成$((A * 100 / B))% $hx$(echo "$Occupation_status" | awk 'END{print "剩餘:"$1"使用率:"$2}')" "2" && echoRgb "____________________________________" && let A++
done
echoRgb "目錄↓↓↓\n -$Backup_folder"
endtime 1 "自定義備份"
else
echoRgb "自定義路徑為空 無法備份" "0"
fi
;;
esac

View File

@@ -1,7 +1,7 @@
if [ -f "${0%/*/*}/tools/bin/tools.sh" ]; then
if [ -f "${0%/*}/tools/bin/tools.sh" ]; then
MODDIR="${0%/*}"
operate="Restore3"
. "${0%/*/*}/tools/bin/tools.sh"
. "${0%/*}/tools/bin/tools.sh"
else
echo "${0%/*/*}/tools/bin/tools.sh遺失"
echo "${0%/*}/tools/bin/tools.sh遺失"
fi