@@ -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 " / $1 Size/ " '{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 " # $1 Size=\" $( du -ks " $data_path " | awk '{print $1}' ) \" " >>" $app_details "
[ [ $2 != $( cat " $app_details " | awk " / $1 path/ " '{print $1}' | cut -f2 -d '=' | tail -n1 | sed 's/\"//g' ) ] ] && echo " # $1 path=\" $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