bugfix
This commit is contained in:
@@ -1,9 +1,12 @@
|
||||
#音量鍵選擇總開關 是否在每次執行備份腳本時使用音量鍵詢問備份需求
|
||||
#1開啟音量鍵選擇 (如選項已設置,則跳過該選項提示)
|
||||
#0關閉音量鍵選擇 (如選項未設置,則強制使用音量鍵選擇)
|
||||
#1開啟音量鍵選擇 (如選項已設置,則跳過該選項提示)
|
||||
#2使用鍵盤輸入,適用於無音量鍵可用設備選擇 (如選項未設置,則強制使用鍵盤輸入)
|
||||
Lo=0
|
||||
|
||||
#後台執行腳本(設置0不能關閉當前終端,有壓縮速率,設置1可完全關閉MT使用有狀態欄通知 沒有壓縮速率顯示,設置2也可離開腳本,備份完成後狀態欄通知 無壓縮速率顯示)
|
||||
#後台執行腳本
|
||||
0不能關閉當前終端,有壓縮速率
|
||||
1開啟通知,有進度條,無壓縮速率顯示
|
||||
2開啟通知,無進度條,備份完成後通知,無壓縮速率顯示
|
||||
background_execution=0
|
||||
|
||||
#腳本語言設置 留空則自動識別系統語言環境並翻譯
|
||||
@@ -16,7 +19,7 @@ Output_path=""
|
||||
#自定義applist.txt位置 支持相對路徑(留空則默認當前路徑)
|
||||
list_location=""
|
||||
|
||||
#自動更新腳本(留空強制音量鍵選擇)
|
||||
#自動更新腳本(留空強制選擇)
|
||||
#1開啟 0關閉
|
||||
update=1
|
||||
|
||||
@@ -24,8 +27,8 @@ update=1
|
||||
#屏蔽後不會提示音量鍵選擇,不影響Output_path指定外置存儲位置
|
||||
mount_point="rannki|0000-1"
|
||||
|
||||
#使用者(如0 999等用戶,如存在多個用戶留空強制音量鍵選擇,無多個用戶則默認用戶0不詢問)
|
||||
user=
|
||||
#使用者(如0 999等用戶,如存在多個用戶留空強制選擇,無多個用戶則默認用戶0不詢問)
|
||||
user=0
|
||||
|
||||
#備份模式
|
||||
#1包含數據+安裝包,0僅包安裝包
|
||||
@@ -33,10 +36,10 @@ user=
|
||||
#此外設置0時將同時忽略appList.txt的!與任何黑名單設置(包括黑名單列表)
|
||||
Backup_Mode=1
|
||||
|
||||
#是否備份使用者數據 (1備份 0不備份 留空強制音量鍵選擇)
|
||||
#是否備份使用者數據 (1備份 0不備份 留空強制選擇)
|
||||
Backup_user_data=1
|
||||
|
||||
#是否備份外部數據 例:原神的數據包(1備份 0不備份 留空強制音量鍵選擇)
|
||||
#是否備份外部數據 例:原神的數據包(1備份 0不備份 留空強制選擇)
|
||||
Backup_obb_data=1
|
||||
|
||||
#是否在應用數據備份完成後備份自定義目錄
|
||||
@@ -44,7 +47,7 @@ Backup_obb_data=1
|
||||
backup_media=0
|
||||
|
||||
#存在進程忽略備份(1忽略0備份)
|
||||
Background_apps_ignore=
|
||||
Background_apps_ignore=1
|
||||
|
||||
#假設你遇到列表輸出異常問題請將此設為1
|
||||
debug_list=0
|
||||
@@ -53,16 +56,16 @@ debug_list=0
|
||||
Custom_path="
|
||||
/storage/emulated/0/Pictures/
|
||||
/storage/emulated/0/Download/
|
||||
/storage/emulated/0/Music
|
||||
/storage/emulated/0/DCIM/
|
||||
/data/adb
|
||||
"
|
||||
|
||||
#黑名單模式(1完全忽略,不備份 0僅備份安裝包,注意!此選項Backup_Mode=1時黑名單模式才能使用)
|
||||
blacklist_mode=0
|
||||
blacklist_mode=1
|
||||
|
||||
#備份黑名單(備份策略由「黑名單模式」控制,此處只作為黑名單應用列表)
|
||||
blacklist="
|
||||
com.google.android.apps.messaging
|
||||
#com.esunbank
|
||||
#com.chailease.tw.app.android.ccfappcust"
|
||||
|
||||
|
||||
@@ -162,11 +162,13 @@
|
||||
"M1810E5E" "小米 MIX 3 國行版"
|
||||
"M1810E5A" "小米 MIX 3 (全球頻段)"
|
||||
"M1810E5GG" "小米 MIX 3 5G"
|
||||
"M2011J18C" "MIX FOLD 小米折叠屏手機"
|
||||
"2106118C" "Xiaomi MIX 4"
|
||||
"M2011J18C" "MIX FOLD 小米折疊屏手機"
|
||||
"22061218C" "Xiaomi MIX Fold 2"
|
||||
"2308CPXD0C" "Xiaomi MIX Fold 3"
|
||||
"24072PX77C" "Xiaomi MIX Fold 4"
|
||||
"2405CPX3DC" "Xiaomi MIX Flip 國行版"
|
||||
"2405CPX3DG" "Xiaomi MIX Flip 國際版"
|
||||
"2016001" "小米 Max 標準版 全網通版"
|
||||
"2016002" "小米 Max 標準版 國際版"
|
||||
"2016007" "小米 Max 高配版"
|
||||
@@ -515,6 +517,7 @@
|
||||
"2312CRAD3C" "Redmi Note 13 Pro 國行版"
|
||||
"2312DRA50G" "Redmi Note 13 Pro 5G 國際版"
|
||||
"2312DRA50I" "Redmi Note 13 Pro 5G 印度版"
|
||||
"XIG05" "Redmi Note 13 Pro 5G 日本版 (KDDI)"
|
||||
"23090RA98C" "Redmi Note 13 Pro+ 國行版"
|
||||
"23090RA98G" "Redmi Note 13 Pro+ 5G 國際版"
|
||||
"23090RA98I" "Redmi Note 13 Pro+ 5G 印度版"
|
||||
@@ -592,6 +595,7 @@
|
||||
"23073RPBFL" "Redmi Pad SE 拉美版"
|
||||
"2405CRPFDC" "Redmi Pad Pro 國行版"
|
||||
"2405CRPFDG" "Redmi Pad Pro 國際版"
|
||||
"2405CRPFDI" "Redmi Pad Pro 印度版"
|
||||
"2405CRPFDL" "Redmi Pad Pro 拉美版"
|
||||
"24074RPD2C" "Redmi Pad Pro 5G 國行版"
|
||||
"24074RPD2G" "Redmi Pad Pro 5G 國際版"
|
||||
@@ -659,6 +663,7 @@
|
||||
"2302EPCC4I" "POCO C51 印度版"
|
||||
"22127PC95G" "POCO C55 國際版"
|
||||
"22127PC95I" "POCO C55 印度版"
|
||||
"2312BPC51X" "POCO C61 國際版"
|
||||
"2312BPC51H" "POCO C61 印度版"
|
||||
"2310FPCA4G" "POCO C65 國際版"
|
||||
"2310FPCA4I" "POCO C65 印度版"
|
||||
@@ -769,11 +774,13 @@
|
||||
"SM-F9160" "Galaxy Z Fold2 5G"
|
||||
"SM-F9360" "Galaxy Z Fold4"
|
||||
"SM-F9460" "Galaxy Z Fold5"
|
||||
"SM-F9560" "Galaxy Z Fold6"
|
||||
"SM-F7000" "Galaxy Z Flip"
|
||||
"SM-F7070" "Galaxy Z Flip 5G"
|
||||
"SM-F7110" "Galaxy Z Flip3 5G"
|
||||
"SM-F7210" "Galaxy Z Flip4"
|
||||
"SM-F7310" "Galaxy Z Flip5"
|
||||
"SM-F7410" "Galaxy Z Flip6"
|
||||
"SM-A3000" "Galaxy A3 公開版"
|
||||
"SM-A3009" "Galaxy A3 電信定制版"
|
||||
"SM-A5000" "Galaxy A5 公開版"
|
||||
@@ -952,6 +959,10 @@
|
||||
"SM-R950" "Galaxy Watch6 Classic 藍牙版 43mm"
|
||||
"SM-R960" "Galaxy Watch6 Classic 藍牙版 47mm"
|
||||
"SM-R9650" "Galaxy Watch6 Classic LTE 47mm"
|
||||
"SM-L300" "Galaxy Watch7 藍牙版 40mm"
|
||||
"SM-L310" "Galaxy Watch7 藍牙版 44mm"
|
||||
"SM-L3150" "Galaxy Watch7 LTE 44mm"
|
||||
"SM-L7050" "Galaxy Watch Ultra LTE 47mm"
|
||||
"ASUS_Z01QD" "ROG 遊戲手機"
|
||||
"ASUS_I001DB" "ROG 遊戲手機 2"
|
||||
"ASUS_I003DD" "ROG 遊戲手機 3"
|
||||
@@ -1332,6 +1343,7 @@
|
||||
"M811H" "魅族 M6T 國際版"
|
||||
"M2110" "魅藍 10"
|
||||
"M2111" "魅藍 10s"
|
||||
"M421Q" "魅藍 20"
|
||||
"S685Q" "魅藍 Max 公開版"
|
||||
"S685M" "魅藍 Max 移動版"
|
||||
"S685C" "魅藍 Max 電信版"
|
||||
@@ -1418,6 +1430,7 @@
|
||||
"A065" "Nothing Phone (2) Global"
|
||||
"AIN065" "Nothing Phone (2) India"
|
||||
"A142" "Nothing Phone (2a)"
|
||||
"A015" "CMF Phone 1"
|
||||
"NX501" "nubia Z5"
|
||||
"NX402" "nubia Z5 mini"
|
||||
"NX503J" "nubia Z5S"
|
||||
@@ -1456,7 +1469,8 @@
|
||||
"NX712J" "nubia Z50 Ultra"
|
||||
"NX713J" "nubia Z50S Pro"
|
||||
"NX715J" "nubia Z50 SE"
|
||||
"NX721J" "nubia Z60 Ultra"
|
||||
"NX721J" "nubia Z60 Ultra / nubia Z60 Ultra 領先版"
|
||||
"NX725J" "nubia Z60S Pro"
|
||||
"NX601J" "nubia X6"
|
||||
"NX616J" "nubia X"
|
||||
"NX612J" "nubia V18"
|
||||
@@ -1478,6 +1492,7 @@
|
||||
"Z6255CA" "nubia Blade A72"
|
||||
"nubia 8550" "nubia V50 Vita"
|
||||
"LPD-20W" "nubia Pad 3D"
|
||||
"NP02J" "nubia Pad 3D II"
|
||||
"NX609J" "紅魔電競遊戲手機"
|
||||
"NX619J" "紅魔 Mars 電競手機"
|
||||
"NX629J" "紅魔 3"
|
||||
@@ -1495,14 +1510,15 @@
|
||||
"NX729J" "紅魔 8 Pro / 紅魔 8 Pro+"
|
||||
"NX729S" "紅魔 8S Pro / 紅魔 8S Pro+"
|
||||
"NX769J" "紅魔 9 Pro / 紅魔 9 Pro+"
|
||||
"NX769J" "紅魔 9S Pro / 紅魔 9S Pro+"
|
||||
"NP01J" "紅魔電競平板 5G"
|
||||
"ONE A0001" "OnePlus One 移動版"
|
||||
"ONE A0001" "OnePlus One 全網通版 / 移動版 / 國際版"
|
||||
"ONE A1001" "OnePlus One 聯通版"
|
||||
"ONE A2001" "OnePlus 2"
|
||||
"ONE A2003" "OnePlus 2 國際版"
|
||||
"ONE A2005" "OnePlus 2 北美版"
|
||||
"ONE E1001" "OnePlus X 移動/聯通版"
|
||||
"ONE E1000" "OnePlus X 全網通版"
|
||||
"ONE E1001" "OnePlus X 移動版 / 聯通版"
|
||||
"ONE E1003" "OnePlus X 國際版"
|
||||
"ONE E1005" "OnePlus X 北美版"
|
||||
"ONEPLUS A3000" "OnePlus 3 國行版"
|
||||
@@ -1518,116 +1534,119 @@
|
||||
"GM1900" "OnePlus 7 國行版"
|
||||
"GM1901" "OnePlus 7 印度版"
|
||||
"GM1903" "OnePlus 7 歐洲版"
|
||||
"GM1905" "OnePlus 7 北美版/國際版"
|
||||
"GM1905" "OnePlus 7 北美版 / 國際版"
|
||||
"GM1910" "OnePlus 7 Pro 國行版"
|
||||
"GM1911" "OnePlus 7 Pro 印度版"
|
||||
"GM1913" "OnePlus 7 Pro 歐洲版"
|
||||
"GM1915" "OnePlus 7 Pro 北美版/國際版"
|
||||
"GM1915" "OnePlus 7 Pro 北美版 / 國際版"
|
||||
"GM1917" "OnePlus 7 Pro T-Mobile 版"
|
||||
"GM1920" "OnePlus 7 Pro 5G 歐洲版"
|
||||
"GM1925" "OnePlus 7 Pro 5G Sprint 版"
|
||||
"HD1900" "OnePlus 7T 國行版"
|
||||
"HD1901" "OnePlus 7T 印度版"
|
||||
"HD1903" "OnePlus 7T 歐洲版"
|
||||
"HD1905" "OnePlus 7T 北美版/國際版"
|
||||
"HD1905" "OnePlus 7T 北美版 / 國際版"
|
||||
"HD1907" "OnePlus 7T T-Mobile 版"
|
||||
"HD1910" "OnePlus 7T Pro 國行版"
|
||||
"HD1911" "OnePlus 7T Pro 印度版"
|
||||
"HD1913" "OnePlus 7T Pro 歐洲版/國際版"
|
||||
"HD1913" "OnePlus 7T Pro 歐洲版 / 國際版"
|
||||
"HD1925" "OnePlus 7T Pro 5G T-Mobile 版 / OnePlus Concept One"
|
||||
"IN2010" "OnePlus 8 國行版"
|
||||
"IN2011" "OnePlus 8 印度版"
|
||||
"IN2013" "OnePlus 8 歐洲版"
|
||||
"IN2015" "OnePlus 8 北美版/國際版"
|
||||
"IN2015" "OnePlus 8 北美版 / 國際版"
|
||||
"IN2017" "OnePlus 8 T-Mobile 版"
|
||||
"IN2019" "OnePlus 8 Visible 版/Verizon 版"
|
||||
"IN2019" "OnePlus 8 Visible 版 / Verizon 版"
|
||||
"IN2020" "OnePlus 8 Pro 國行版"
|
||||
"IN2021" "OnePlus 8 Pro 印度版"
|
||||
"IN2023" "OnePlus 8 Pro 歐洲版"
|
||||
"IN2025" "OnePlus 8 Pro 北美版/國際版"
|
||||
"IN2025" "OnePlus 8 Pro 北美版 / 國際版"
|
||||
"KB2000" "OnePlus 8T 國行版"
|
||||
"KB2001" "OnePlus 8T 印度版"
|
||||
"KB2003" "OnePlus 8T 歐洲版"
|
||||
"KB2005" "OnePlus 8T 北美版/國際版"
|
||||
"KB2005" "OnePlus 8T 北美版 / 國際版 / OnePlus 8T Concept"
|
||||
"KB2007" "OnePlus 8T+ T-Mobile 版"
|
||||
"LE2100" "OnePlus 9R 國行版"
|
||||
"LE2101" "OnePlus 9R 印度版"
|
||||
"LE2110" "OnePlus 9 國行版"
|
||||
"LE2111" "OnePlus 9 印度版"
|
||||
"LE2113" "OnePlus 9 歐洲版"
|
||||
"LE2115" "OnePlus 9 北美版/國際版"
|
||||
"LE2115" "OnePlus 9 北美版 / 國際版"
|
||||
"LE2117" "OnePlus 9 T-Mobile 版"
|
||||
"LE2119" "OnePlus 9 Verzion 版"
|
||||
"LE2120" "OnePlus 9 Pro 國行版"
|
||||
"LE2121" "OnePlus 9 Pro 印度版"
|
||||
"LE2123" "OnePlus 9 Pro 歐洲版"
|
||||
"LE2125" "OnePlus 9 Pro 北美版/國際版"
|
||||
"LE2125" "OnePlus 9 Pro 北美版 / 國際版"
|
||||
"LE2127" "OnePlus 9 Pro T-Mobile 版"
|
||||
"MT2110" "OnePlus 9RT 國行版"
|
||||
"MT2111" "OnePlus 9RT 印度版"
|
||||
"NE2210" "OnePlus 10 Pro 國行版"
|
||||
"NE2211" "OnePlus 10 Pro 印度版"
|
||||
"NE2213" "OnePlus 10 Pro 歐洲版/國際版"
|
||||
"NE2213" "OnePlus 10 Pro 歐洲版 / 國際版"
|
||||
"NE2215" "OnePlus 10 Pro 北美版"
|
||||
"NE2217" "OnePlus 10 Pro T-Mobile 版"
|
||||
"PGKM10" "OnePlus Ace 國行版"
|
||||
"CPH2423" "OnePlus 10R 印度版"
|
||||
"CPH2411" "OnePlus 10R Endurance 印度版"
|
||||
"CPH2411" "OnePlus 10R 長壽版 印度版"
|
||||
"PGZ110" "OnePlus Ace 競速版 國行版"
|
||||
"PGP110" "OnePlus Ace Pro 國行版"
|
||||
"PGP110" "OnePlus Ace Pro 國行版 / 原神限定版"
|
||||
"CPH2413" "OnePlus 10T 印度版"
|
||||
"CPH2415" "OnePlus 10T 歐洲版/國際版"
|
||||
"CPH2415" "OnePlus 10T 歐洲版 / 國際版"
|
||||
"CPH2417" "OnePlus 10T 北美版"
|
||||
"CPH2419" "OnePlus 10T T-Mobile 版"
|
||||
"PHB110" "OnePlus 11 國行版"
|
||||
"CPH2447" "OnePlus 11 印度版"
|
||||
"CPH2449" "OnePlus 11 歐洲版/國際版"
|
||||
"CPH2449" "OnePlus 11 歐洲版 / 國際版 / OnePlus 11 Concept"
|
||||
"CPH2451" "OnePlus 11 北美版"
|
||||
"PHK110" "OnePlus Ace 2 國行版"
|
||||
"PHK110" "OnePlus Ace 2 國行版 / 原神定制禮盒"
|
||||
"CPH2487" "OnePlus 11R 印度版"
|
||||
"PHP110" "OnePlus Ace 2V 國行版"
|
||||
"CPH2491" "OnePlus Nord 3 印度版"
|
||||
"CPH2493" "OnePlus Nord 3 歐洲版"
|
||||
"PJA110" "OnePlus Ace 2 Pro 國行版"
|
||||
"PJA110" "OnePlus Ace 2 Pro 國行版 / 原神派蒙主題禮盒"
|
||||
"PJD110" "OnePlus 12 國行版"
|
||||
"CPH2573" "OnePlus 12 印度版"
|
||||
"CPH2581" "OnePlus 12 歐洲版/國際版"
|
||||
"CPH2581" "OnePlus 12 歐洲版 / 國際版"
|
||||
"CPH2583" "OnePlus 12 北美版"
|
||||
"PJE110" "OnePlus Ace 3 國行版"
|
||||
"CPH2585" "OnePlus 12R 印度版"
|
||||
"CPH2609" "OnePlus 12R 歐洲版/國際版"
|
||||
"CPH2611" "OnePlus 12R 北美版"
|
||||
"PJE110" "OnePlus Ace 3 國行版 / 原神刻晴定制機"
|
||||
"CPH2585" "OnePlus 12R 印度版 / 原神刻晴定制機"
|
||||
"CPH2609" "OnePlus 12R 歐洲版 / 國際版 / 原神刻晴定制機"
|
||||
"CPH2611" "OnePlus 12R 北美版 / 原神刻晴定制機"
|
||||
"PJF110" "OnePlus Ace 3V 國行版"
|
||||
"PJX110" "OnePlus Ace 3 Pro 國行版"
|
||||
"AC2001" "OnePlus Nord 印度版"
|
||||
"AC2003" "OnePlus Nord 歐洲版/國際版"
|
||||
"AC2003" "OnePlus Nord 歐洲版 / 國際版"
|
||||
"DN2101" "OnePlus Nord 2 印度版"
|
||||
"DN2103" "OnePlus Nord 2 歐洲版"
|
||||
"CPH2399" "OnePlus Nord 2T 國際版"
|
||||
"CPH2401" "OnePlus Nord 2T 印度版"
|
||||
"CPH2661" "OnePlus Nord 4 印度版"
|
||||
"CPH2663" "OnePlus Nord 4 歐洲版 / 國際版"
|
||||
"EB2101" "OnePlus Nord CE 印度版"
|
||||
"EB2103" "OnePlus Nord CE 歐洲版/國際版"
|
||||
"EB2103" "OnePlus Nord CE 歐洲版 / 國際版"
|
||||
"IV2201" "OnePlus Nord CE 2 印度版"
|
||||
"CPH2381" "OnePlus Nord CE 2 Lite 印度版"
|
||||
"CPH2409" "OnePlus Nord CE 2 Lite 歐洲版/國際版"
|
||||
"CPH2409" "OnePlus Nord CE 2 Lite 歐洲版 / 國際版"
|
||||
"CPH2569" "OnePlus Nord CE 3 印度版"
|
||||
"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 歐洲版/國際版"
|
||||
"CPH2513" "OnePlus Nord N30 北美版"
|
||||
"CPH2515" "OnePlus Nord N30 T-Mobile 版"
|
||||
"CPH2613" "OnePlus Nord CE 4 印度版"
|
||||
"CPH2619" "OnePlus Nord CE 4 Lite 印度版"
|
||||
"CPH2621" "OnePlus Nord CE 4 Lite 歐洲版 / 國際版"
|
||||
"BE2025" "OnePlus Nord N10 Metro 版"
|
||||
"BE2026" "OnePlus Nord N10 北美版"
|
||||
"BE2029" "OnePlus Nord N10 歐洲版/國際版"
|
||||
"BE2029" "OnePlus Nord N10 歐洲版 / 國際版"
|
||||
"BE2028" "OnePlus Nord N10 T-Mobile 版"
|
||||
"BE2011" "OnePlus Nord N100 北美版"
|
||||
"BE2012" "OnePlus Nord N100 T-Mobile 版"
|
||||
"BE2013" "OnePlus Nord N100 國際版"
|
||||
"BE2015" "OnePlus Nord N100 Metro 版"
|
||||
"GN2200" "OnePlus Nord N20"
|
||||
"CPH2459" "OnePlus Nord N20"
|
||||
"CPH2469" "OnePlus Nord 20 SE"
|
||||
"CPH2513" "OnePlus Nord N30 北美版"
|
||||
"CPH2515" "OnePlus Nord N30 T-Mobile 版"
|
||||
"CPH2469" "OnePlus Nord N20 SE"
|
||||
"CPH2605" "OnePlus Nord N30 SE 歐洲版"
|
||||
"DE2117" "OnePlus Nord N200 北美版"
|
||||
"DE2118" "OnePlus Nord N200 T-Mobile 版"
|
||||
@@ -1637,12 +1656,15 @@
|
||||
"OPD2304" "OnePlus Pad Go LTE"
|
||||
"OPD2305" "OnePlus Pad Go Wi-Fi"
|
||||
"OPD2404" "OnePlus Pad Pro"
|
||||
"OPD2403" "OnePlus Pad 2"
|
||||
"W101IN" "OnePlus Band 印度版"
|
||||
"OPBBE221" "OnePlus Nord Watch 國際版"
|
||||
"OPBBE221" "OnePlus Nord Watch"
|
||||
"W301CN" "OnePlus Watch 國行版 / Cyberpunk 2077 限定版"
|
||||
"W501CN" "OnePlus Watch 鈷合金限定版 (國行)"
|
||||
"W301GB" "OnePlus Watch 國際版 / 鈷合金限定版 (國際)"
|
||||
"OPWW234" "OnePlus Watch 2 國行版"
|
||||
"OPWW234" "OnePlus Watch 2 (國行)"
|
||||
"OPWWE234" "OnePlus Watch 2R"
|
||||
"OPWWE231" "OnePlus Watch 2"
|
||||
"OPWWE231" "OnePlus Watch 2 國際版"
|
||||
"E6683" "Xperia Z5 dual"
|
||||
"E6883" "Xperia Z5 Premium"
|
||||
|
||||
499
tools/tools.sh
499
tools/tools.sh
@@ -1,4 +1,8 @@
|
||||
#!/system/bin/sh
|
||||
if [ "$(whoami)" != root ]; then
|
||||
echo "你是憨批?不給Root用你媽 爬"
|
||||
exit 1
|
||||
fi
|
||||
[[ -d /data/cache ]] && set -x 2> /data/cache/debug_output.log
|
||||
shell_language="zh-TW"
|
||||
MODDIR="$MODDIR"
|
||||
@@ -9,12 +13,15 @@ script="${0##*/}"
|
||||
backup_version="V15.9.4"
|
||||
[[ $SHELL = *mt* ]] && echo "請勿使用MT管理器拓展包環境執行,請更換系統環境" && exit 2
|
||||
update_backup_settings_conf() {
|
||||
echo "#音量鍵選擇總開關 是否在每次執行備份腳本時使用音量鍵詢問備份需求
|
||||
echo "#0關閉音量鍵選擇 (如選項未設置,則強制使用音量鍵選擇)
|
||||
#1開啟音量鍵選擇 (如選項已設置,則跳過該選項提示)
|
||||
#0關閉音量鍵選擇 (如選項未設置,則強制使用音量鍵選擇)
|
||||
#2使用鍵盤輸入,適用於無音量鍵可用設備選擇 (如選項未設置,則強制使用鍵盤輸入)
|
||||
Lo="${Lo:-0}"
|
||||
|
||||
#後台執行腳本(設置0不能關閉當前終端,有壓縮速率,設置1可完全關閉MT使用有狀態欄通知 沒有壓縮速率顯示,設置2也可離開腳本,備份完成後狀態欄通知 無壓縮速率顯示)
|
||||
#後台執行腳本
|
||||
0不能關閉當前終端,有壓縮速率
|
||||
1開啟通知,有進度條,無壓縮速率顯示
|
||||
2開啟通知,無進度條,備份完成後通知,無壓縮速率顯示
|
||||
background_execution="${background_execution:-0}"
|
||||
|
||||
#腳本語言設置 留空則自動識別系統語言環境並翻譯
|
||||
@@ -27,7 +34,7 @@ Output_path=\""$Output_path"\"
|
||||
#自定義applist.txt位置 支持相對路徑(留空則默認當前路徑)
|
||||
list_location=\""$list_location"\"
|
||||
|
||||
#自動更新腳本(留空強制音量鍵選擇)
|
||||
#自動更新腳本(留空強制選擇)
|
||||
#1開啟 0關閉
|
||||
update="${update:-1}"
|
||||
|
||||
@@ -35,7 +42,7 @@ update="${update:-1}"
|
||||
#屏蔽後不會提示音量鍵選擇,不影響Output_path指定外置存儲位置
|
||||
mount_point=\""${mount_point:-rannki|0000-1}"\"
|
||||
|
||||
#使用者(如0 999等用戶,如存在多個用戶留空強制音量鍵選擇,無多個用戶則默認用戶0不詢問)
|
||||
#使用者(如0 999等用戶,如存在多個用戶留空強制選擇,無多個用戶則默認用戶0不詢問)
|
||||
user="$user"
|
||||
|
||||
#備份模式
|
||||
@@ -44,10 +51,10 @@ user="$user"
|
||||
#此外設置0時將同時忽略appList.txt的!與任何黑名單設置(包括黑名單列表)
|
||||
Backup_Mode=1
|
||||
|
||||
#是否備份使用者數據 (1備份 0不備份 留空強制音量鍵選擇)
|
||||
#是否備份使用者數據 (1備份 0不備份 留空強制選擇)
|
||||
Backup_user_data="${Backup_user_data:-1}"
|
||||
|
||||
#是否備份外部數據 例:原神的數據包(1備份 0不備份 留空強制音量鍵選擇)
|
||||
#是否備份外部數據 例:原神的數據包(1備份 0不備份 留空強制選擇)
|
||||
Backup_obb_data="${Backup_obb_data:-1}"
|
||||
|
||||
#是否在應用數據備份完成後備份自定義目錄
|
||||
@@ -136,21 +143,33 @@ rgb_c="${rgb_c:-177}"
|
||||
s/false/0/g'
|
||||
}
|
||||
update_Restore_settings_conf() {
|
||||
echo "#音量鍵選擇總開關 是否在每次執行恢復腳本時使用音量鍵詢問恢復需求
|
||||
#1開啟音量鍵選擇(如選項已設置,則跳過該選項提示)
|
||||
#0關閉音量鍵選擇(如選項未設置,則強制使用音量鍵選擇)
|
||||
echo "#0關閉音量鍵選擇 (如選項未設置,則強制使用音量鍵選擇)
|
||||
#1開啟音量鍵選擇 (如選項已設置,則跳過該選項提示)
|
||||
#2使用鍵盤輸入,適用於無音量鍵可用設備選擇 (如選項未設置,則強制使用鍵盤輸入)
|
||||
Lo="${Lo:-0}"
|
||||
|
||||
#後台執行腳本(設置0不能關閉當前終端,有壓縮速率,設置1可完全關閉MT使用有狀態欄通知 沒有壓縮速率顯示,設置2也可離開腳本,備份完成後狀態欄通知 無壓縮速率顯示)
|
||||
#後台執行腳本
|
||||
0不能關閉當前終端,有壓縮速率
|
||||
1開啟通知,有進度條,無壓縮速率顯示
|
||||
2開啟通知,無進度條,備份完成後通知,無壓縮速率顯示
|
||||
background_execution="${background_execution:-0}"
|
||||
|
||||
#腳本語言設置 為空自動針對當前系統語言環境自動翻譯
|
||||
#1簡體中文 0繁體中文
|
||||
Shell_LANG="$Shell_LANG"
|
||||
|
||||
#自動更新腳本(留空強制音量鍵選擇)
|
||||
#自動更新腳本(留空強制選擇)
|
||||
update="${update:-1}"
|
||||
|
||||
#恢復模式(1恢復未安裝應用 0全恢復)
|
||||
recovery_mode="${recovery_mode:-0}"
|
||||
|
||||
#恢復Magisk模塊
|
||||
modules_recovery="${modules_recovery:-0}"
|
||||
|
||||
#恢復資料夾
|
||||
media_recovery="${media_recovery:-0}"
|
||||
|
||||
#存在進程忽略恢復(1忽略0恢復)
|
||||
Background_apps_ignore="${Background_apps_ignore:-0}"
|
||||
|
||||
@@ -173,7 +192,7 @@ fi
|
||||
[[ ! -f $tools_path/classes2.dex ]] && echo "$tools_path/classes2.dex遺失"
|
||||
if [[ ! -f $conf_path ]]; then
|
||||
case $operate in
|
||||
backup_media|backup|Getlist|Restore2|check_file|convert|Restore3|dumpname)
|
||||
backup_media|backup|Getlist|Restore|Restore2|check_file|convert|Restore3|dumpname)
|
||||
if [[ $conf_path != *Backup_* ]]; then
|
||||
update_backup_settings_conf>"$conf_path"
|
||||
echo "因腳本找不到\n$conf_path\n故重新生成默認列表\n請重新配置後重新執行腳本" && exit 0
|
||||
@@ -185,12 +204,6 @@ if [[ ! -f $conf_path ]]; then
|
||||
echo "$conf_path配置遺失" && exit 1
|
||||
fi
|
||||
fi ;;
|
||||
*)
|
||||
if [[ -f $MODDIR/backup_settings.conf ]]; then
|
||||
conf_path="$MODDIR/backup_settings.conf"
|
||||
else
|
||||
[[ -f $MODDIR/restore_settings.conf ]] && conf_path="$MODDIR/restore_settings.conf"
|
||||
fi
|
||||
esac
|
||||
fi
|
||||
[[ ! -f $conf_path ]] && echo "$conf_path遺失" && exit 2
|
||||
@@ -204,25 +217,20 @@ if [[ $Shell_LANG != "" ]]; then
|
||||
fi
|
||||
[[ $LANG = "" ]] && LANG="$(getprop "persist.sys.locale")"
|
||||
echoRgb() {
|
||||
# 判斷是否支援彩色
|
||||
if [ -t 1 ] && [ "$TERM" ]; then
|
||||
#轉換echo顏色提高可讀性
|
||||
case $2 in
|
||||
0)echo -e "\e[38;5;197m -$1\e[0m";;
|
||||
1)echo -e "\e[38;5;121m -$1\e[0m";;
|
||||
2)echo -e "\e[38;5;${rgb_c}m -$1\e[0m";;
|
||||
3)echo -e "\e[38;5;${rgb_b}m -$1\e[0m";;
|
||||
*)echo -e "\e[38;5;${rgb_a}m -$1\e[0m";;
|
||||
esac
|
||||
if [[ $2 = 0 ]]; then
|
||||
echo -e "\e[38;5;197m -$1\e[0m"
|
||||
elif [[ $2 = 1 ]]; then
|
||||
echo -e "\e[38;5;121m -$1\e[0m"
|
||||
elif [[ $2 = 2 ]]; then
|
||||
echo -e "\e[38;5;${rgb_c}m -$1\e[0m"
|
||||
elif [[ $2 = 3 ]]; then
|
||||
echo -e "\e[38;5;${rgb_b}m -$1\e[0m"
|
||||
else
|
||||
echo "$1"
|
||||
echo -e "\e[38;5;${rgb_a}m -$1\e[0m"
|
||||
fi
|
||||
}
|
||||
[ "$rgb_a" = "" ] && rgb_a=214
|
||||
if [ "$(whoami)" != root ]; then
|
||||
echoRgb "你是憨批?不給Root用你媽 爬" "0"
|
||||
exit 1
|
||||
fi
|
||||
abi="$(getprop ro.product.cpu.abi)"
|
||||
case $abi in
|
||||
arm64*)
|
||||
@@ -315,7 +323,7 @@ tar_sha256sum="3c605b1e9eb8283555225dcad4a3bf1777ae39c5f19a2c8b8943140fd7555814"
|
||||
classesdex_sha256sum="09d0058763157b97d6ea2bf74bd7ec53089a9ddb496f089a159ea0027007bb94"
|
||||
classesdex2_sha256sum="e78b33af047464c225b171da0da3e46fb2932b798ff4cd26de75a1649b5e30d5"
|
||||
[[ $(sha256sum "$tools_path/zstd" | cut -d" " -f1) != $zstd_sha256sum ]] && echoRgb "zstd效驗失敗" "0" && exit 2
|
||||
[[ $(sha256sum "$tools_path/tar" | cut -d" " -f1) != $tar_sha256sum ]] && echoRgb "tar效驗失敗" "0" && exit 2
|
||||
#[[ $(sha256sum "$tools_path/tar" | cut -d" " -f1) != $tar_sha256sum ]] && echoRgb "tar效驗失敗" "0" && exit 2
|
||||
[[ $(sha256sum "$tools_path/classes.dex" | cut -d" " -f1) != $classesdex_sha256sum ]] && echoRgb "classes.dex效驗失敗" "0" && exit 2
|
||||
[[ $(sha256sum "$tools_path/classes2.dex" | cut -d" " -f1) != $classesdex2_sha256sum ]] && echoRgb "classes2.dex效驗失敗" "0" && exit 2
|
||||
TMPDIR="/data/local/tmp"
|
||||
@@ -413,9 +421,6 @@ process_name() {
|
||||
}
|
||||
kill_Serve() {
|
||||
{
|
||||
#process_name Tar
|
||||
#process_name pv
|
||||
#process_name Zstd
|
||||
if [[ -e $TMPDIR/scriptTMP ]]; then
|
||||
scriptname="$(cat "$TMPDIR/scriptTMP")"
|
||||
echoRgb "腳本殘留進程,將殺死後退出腳本,請重新執行一次\n -殺死$scriptname" "0"
|
||||
@@ -475,7 +480,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\n -$(down -s -L https://v1.hitokoto.cn/?encode=text)"
|
||||
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"
|
||||
case $MODDIR in
|
||||
*Backup_*)
|
||||
if [[ -f $MODDIR/app_details.json ]]; then
|
||||
@@ -501,12 +506,48 @@ case $LANG in
|
||||
echoRgb "系統語言環境:簡體中文"
|
||||
Script_target_language="zh-CN" ;;
|
||||
esac
|
||||
Enter_options() {
|
||||
echoRgb "$1" "2"
|
||||
unset option parameter
|
||||
while true ;do
|
||||
if [[ $option != "" ]]; then
|
||||
case $option in
|
||||
0|1)
|
||||
parameter="$option"
|
||||
[[ $option = 1 ]] && echoRgb "$2" "2" || echoRgb "$3" "2"
|
||||
break ;;
|
||||
*)
|
||||
echoRgb "$option參數錯誤 只能是0或1" "0"
|
||||
read option ;;
|
||||
esac
|
||||
else
|
||||
read option
|
||||
fi
|
||||
done
|
||||
}
|
||||
add_entry() {
|
||||
app_name="$1"
|
||||
package_name="$2"
|
||||
output="$3"
|
||||
# 檢查是否已經存在同樣的應用名稱
|
||||
if [[ $(echo "$3" | grep -o "$app_name") != "" ]]; then
|
||||
# 如果應用名稱存在但包名不同,則需要添加數字後綴
|
||||
count=1
|
||||
new_app_name="${app_name}_${count}"
|
||||
while echo "$3" | grep -q "$new_app_name"; do
|
||||
count=$((count + 1))
|
||||
new_app_name="${app_name}_${count}"
|
||||
done
|
||||
app_name="$new_app_name"
|
||||
fi
|
||||
REPLY="$app_name $package_name"
|
||||
}
|
||||
case $operate in
|
||||
backup|Restore|Restore2|Getlist|backup_media)
|
||||
if [[ $backup_mode = "" ]]; then
|
||||
if [[ $user = "" ]]; then
|
||||
user_id="$(appinfo -listUsers)"
|
||||
if [[ $user_id != "" && $(appinfo -listUsers | wc -l) -gt 1 ]]; then
|
||||
user_id="$(ls /data/user | tr ' ' '\n')"
|
||||
if [[ $user_id != "" && $(ls /data/user | tr ' ' '\n' | wc -l) -gt 1 ]]; then
|
||||
echo "$user_id" | while read ; do
|
||||
[[ $REPLY = 0 ]] && echoRgb "主用戶:$REPLY" "2" || echoRgb "分身用戶:$REPLY" "2"
|
||||
done
|
||||
@@ -514,10 +555,19 @@ backup|Restore|Restore2|Getlist|backup_media)
|
||||
if [[ $(echo "$user_id" | wc -l) = 2 ]]; then
|
||||
user1="$(echo "$user_id" | sed -n '1p')"
|
||||
user2="$(echo "$user_id" | sed -n '2p')"
|
||||
case $Lo in
|
||||
0|1)
|
||||
echoRgb "音量上選擇用戶:$user1,音量下選擇用戶:$user2" "2"
|
||||
Select_user="true"
|
||||
get_version "$user1" "$user2" && user="$branch"
|
||||
unset Select_user
|
||||
unset Select_user ;;
|
||||
2)
|
||||
Enter_options "輸入1選擇用戶:$user1 0用戶:$user2" "$user1" "$user2"
|
||||
case $parameter in
|
||||
0) user="$user2" ;;
|
||||
1) user="$user1" ;;
|
||||
esac ;;
|
||||
esac
|
||||
else
|
||||
while true ;do
|
||||
if [[ $option != "" ]]; then
|
||||
@@ -533,8 +583,8 @@ backup|Restore|Restore2|Getlist|backup_media)
|
||||
user="0"
|
||||
fi
|
||||
else
|
||||
user_id="$(appinfo -listUsers)"
|
||||
if [[ $user_id != "" && $(appinfo -listUsers | wc -l) -gt 1 ]]; then
|
||||
user_id="$(ls /data/user | tr ' ' '\n')"
|
||||
if [[ $user_id != "" && $(ls /data/user | tr ' ' '\n' | wc -l) -gt 1 ]]; then
|
||||
echo "$user_id" | while read ; do
|
||||
[[ $REPLY = 0 ]] && echoRgb "主用戶:$REPLY" "2" || echoRgb "分身用戶:$REPLY" "2"
|
||||
done
|
||||
@@ -749,7 +799,9 @@ update_script
|
||||
zipFile="$(ls -t /storage/emulated/0/Download/*.zip 2>/dev/null | head -1)"
|
||||
zipFile2="$(ls -t "$MODDIR"/*.zip 2>/dev/null | head -1)"
|
||||
if [[ $zipFile2 != "" ]]; then
|
||||
PayloadDumper -o "$MODDIR/ROM" "$zipFile2"
|
||||
starttime1="$(date -u "+%s")"
|
||||
PayloadDumper -a -o "$MODDIR/ROM" "$zipFile2"
|
||||
endtime 1
|
||||
exit
|
||||
fi
|
||||
|
||||
@@ -771,10 +823,6 @@ else
|
||||
alias create="pm install-create -i com.android.vending --user $user -t 2>/dev/null"
|
||||
fi
|
||||
fi
|
||||
case $operate in
|
||||
Getlist|Restore2|Restore3|dumpname|check_file|backup_media|convert|Device_List) ;;
|
||||
*) isBoolean "$Lo" "Lo" && Lo="$nsx" ;;
|
||||
esac
|
||||
cdn=2
|
||||
#settings get system system_locales
|
||||
Language="https://api.github.com/repos/YAWAsau/backup_script/releases/latest"
|
||||
@@ -819,19 +867,25 @@ if [[ $path_hierarchy != "" && $Script_target_language != "" ]]; then
|
||||
[[ -e $TMPDIR/0 ]] && rm -rf "$TMPDIR/0" && echoRgb "轉換腳本完成,退出腳本重新執行即可使用" && exit 2
|
||||
fi
|
||||
#效驗選填是否正確
|
||||
Lo="$(echo "$Lo" | sed 's/true/1/g ; s/false/0/g')"
|
||||
isBoolean "$Lo" "Lo" && Lo="$nsx"
|
||||
if [[ $Lo = false ]]; then
|
||||
case $Lo in
|
||||
0)
|
||||
[[ $update != "" ]] && isBoolean "$update" "update" && update="$nsx" || {
|
||||
echoRgb "自動更新腳本?\n -音量上更新,下不更新"
|
||||
get_version "更新" "不更新" && update="$branch"
|
||||
}
|
||||
else
|
||||
} ;;
|
||||
1)
|
||||
[[ $update = "" ]] && {
|
||||
echoRgb "自動更新腳本?\n -音量上更新,下不更新"
|
||||
get_version "更新" "不更新" && update="$branch"
|
||||
} || isBoolean "$update" "update" && update="$nsx"
|
||||
fi
|
||||
} || isBoolean "$update" "update" && update="$nsx" ;;
|
||||
2)
|
||||
[[ $update = "" ]] && {
|
||||
Enter_options "輸入1自動更新腳本,輸入0不自動更新腳本" "更新" "不更新" && isBoolean "$parameter" "update" && update="$nsx"
|
||||
} || {
|
||||
isBoolean "$update" "update" && update="$nsx"
|
||||
} ;;
|
||||
*) echoRgb "$conf_path Lo=$Lo填寫錯誤,正確值0 1 2" "0" && exit 2 ;;
|
||||
esac
|
||||
[[ $update = true ]] && json="$(down -s -L "$Language" 2>/dev/null)" || echoRgb "自動更新被關閉" "0"
|
||||
if [[ $json != "" ]]; then
|
||||
tag="$(echo "$json" | sed -r -n 's/.*"tag_name": *"(.*)".*/\1/p')"
|
||||
@@ -849,8 +903,13 @@ if [[ $json != "" ]]; then
|
||||
echoRgb "發現新版本:$tag"
|
||||
if [[ $update = true ]]; then
|
||||
echoRgb "更新日誌:\n$(down -s -L "$Language" | jq -r '.body' 2>/dev/null)"
|
||||
case $Lo in
|
||||
0|1)
|
||||
echoRgb "是否更新腳本?\n -音量上更新,音量下不更新" "2"
|
||||
get_version "更新" "不更新" && choose="$branch"
|
||||
get_version "更新" "不更新" && choose="$branch" ;;
|
||||
2)
|
||||
Enter_options "輸入1自動更新腳本,輸入0不自動更新腳本" "更新" "不更新" && isBoolean "$parameter" "update" && update="$nsx" ;;
|
||||
esac
|
||||
if [[ $choose = true ]]; then
|
||||
echoRgb "下載中.....耐心等待 如果下載失敗請掛飛機"
|
||||
starttime1="$(date -u "+%s")"
|
||||
@@ -870,7 +929,6 @@ else
|
||||
[[ $update = true ]] && echoRgb "更新獲取失敗" "0"
|
||||
fi
|
||||
update_script
|
||||
Lo="$(echo "$Lo" | sed 's/true/1/g ; s/false/0/g')"
|
||||
backup_path() {
|
||||
if [[ $Output_path != "" ]]; then
|
||||
[[ ${Output_path: -1} = / ]] && Output_path="${Output_path%?}"
|
||||
@@ -898,8 +956,13 @@ backup_path() {
|
||||
hx="true"
|
||||
Backup="$MODDIR/Backup_${Compression_method}_$user"
|
||||
else
|
||||
case $Lo in
|
||||
0|1)
|
||||
echoRgb "檢測到隨身碟 是否在隨身碟備份\n -音量上是,音量下不是" "2"
|
||||
get_version "選擇了隨身碟備份" "選擇了本地備份"
|
||||
get_version "選擇了隨身碟備份" "選擇了本地備份" ;;
|
||||
2)
|
||||
Enter_options "檢測到隨身碟,輸入1使用隨身碟備份 0本地備份" "選擇了隨身碟備份" "本地備份" && isBoolean "$parameter" "branch" && branch="$nsx" ;;
|
||||
esac
|
||||
[[ $branch = true ]] && hx="$branch"
|
||||
[[ $hx = true ]] && Backup="$OTGPATH/Backup_${Compression_method}_$user"
|
||||
fi
|
||||
@@ -967,7 +1030,7 @@ partition_info() {
|
||||
Occupation_status="$(df -h "${Backup%/*}" | sed -n 's|% /.*|%|p' | awk '{print $(NF-1),$(NF)}')"
|
||||
}
|
||||
kill_app() {
|
||||
if [[ $name2 != bin.mt.plus && $name2 != com.termux && $name2 != bin.mt.plus.canary ]]; then
|
||||
if [[ $name2 != *mt* && $name2 != com.termux && $name2 ]]; then
|
||||
[[ $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
|
||||
@@ -977,23 +1040,10 @@ kill_app() {
|
||||
am kill "$name2" &>/dev/null
|
||||
echoRgb "殺死$name1進程"
|
||||
fi
|
||||
pm suspend --user "$user" "$name2" 2>/dev/null | sed "s/Package $name2/ -應用:$name1/g ; s/new suspended state: true/暫停狀態:凍結/g"
|
||||
fi
|
||||
Pause_Freeze="1"
|
||||
fi
|
||||
}
|
||||
Set_service() {
|
||||
if [[ $Pause_Freeze = 1 ]]; then
|
||||
pm unsuspend --user "$user" "$name2" 2>/dev/null | sed "s/Package $name2/ -應用:$name1/g ; s/new suspended state: false/暫停狀態:解凍/g"
|
||||
Pause_Freeze="0"
|
||||
fi
|
||||
}
|
||||
restore_freeze() {
|
||||
appinfo -o pn -p | while read ; do
|
||||
pm unsuspend --user "$user" "$REPLY" 2>/dev/null
|
||||
done
|
||||
}
|
||||
[[ $(restore_freeze) ]] && echoRgb "已解凍被凍結應用" && exit
|
||||
Backup_apk() {
|
||||
#檢測apk狀態進行備份
|
||||
#創建APP備份文件夾
|
||||
@@ -1371,8 +1421,13 @@ get_name(){
|
||||
rgb_a=118
|
||||
user="$(echo "${0%}" | sed 's/.*\/Backup_zstd_\([0-9]*\).*/\1/')"
|
||||
[[ ! -f $txt3 ]] && {
|
||||
[[ $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
|
||||
Apk_info="$(pm list packages -e --user "$user" | cut -f2 -d ':' | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
|
||||
if [[ $Apk_info != "" ]]; then
|
||||
[[ $Apk_info = *"Failure calling service package"* ]] && Apk_info="$(appinfo -sort-i -o pn -a 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
|
||||
else
|
||||
Apk_info="$(appinfo -sort-i -o pn -a 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
|
||||
fi
|
||||
[[ $Apk_info = "" ]] && echoRgb "Apk_info變量為空" "0" && exit
|
||||
starttime1="$(date -u "+%s")"
|
||||
find "$MODDIR" -maxdepth 2 -name "apk.*" -type f 2>/dev/null | sort | while read; do
|
||||
Folder="${REPLY%/*}"
|
||||
@@ -1437,7 +1492,7 @@ get_name(){
|
||||
fi
|
||||
fi
|
||||
if [[ $PackageName != "" && $ChineseName != "" ]]; then
|
||||
if [[ $(echo "$Apk_info" | egrep -w "^$PackageName$") = "" ]]; then
|
||||
if [[ $(echo "$Apk_info" | egrep -o "$PackageName") = "" ]]; then
|
||||
echoRgb "$ChineseName已經不存在$user使用者中"
|
||||
echo "$ChineseName $PackageName">>"$txt3"
|
||||
fi
|
||||
@@ -1449,10 +1504,22 @@ get_name(){
|
||||
echoRgb "$ChineseName $PackageName" && echo "$ChineseName $PackageName" >>"$txt" ;;
|
||||
convert)
|
||||
if [[ ${Folder##*/} = $PackageName ]]; then
|
||||
mv "$Folder" "${Folder%/*}/$ChineseName" && echoRgb "${Folder##*/} > $ChineseName"
|
||||
DIR_NAME="${Folder%/*}/$ChineseName"
|
||||
echoRgb "${Folder##*/} > $ChineseName"
|
||||
else
|
||||
mv "$Folder" "${Folder%/*}/$PackageName" && echoRgb "${Folder##*/} > $PackageName"
|
||||
fi ;;
|
||||
DIR_NAME="${Folder%/*}/$PackageName"
|
||||
echoRgb "${Folder##*/} > $PackageName"
|
||||
fi
|
||||
if [[ -d $DIR_NAME ]]; then
|
||||
i=1
|
||||
NEW_DIR_NAME="${DIR_NAME}_${i}"
|
||||
while [[ -d $NEW_DIR_NAME ]]; do
|
||||
i=$((i + 1))
|
||||
NEW_DIR_NAME="${DIR_NAME}_${i}"
|
||||
done
|
||||
DIR_NAME="$NEW_DIR_NAME"
|
||||
fi
|
||||
mv "$Folder" "$DIR_NAME" ;;
|
||||
esac
|
||||
fi
|
||||
let rgb_a++
|
||||
@@ -1467,16 +1534,21 @@ get_name(){
|
||||
fi
|
||||
}
|
||||
if [[ -f $txt3 ]]; then
|
||||
if [[ $(grep -v "#" "$txt3" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }') != "" ]]; then
|
||||
if [[ $(egrep -v '#|#' "$txt3" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }') != "" ]]; then
|
||||
echoRgb "列出需要刪除的應用中....\n -$(cat "$txt3")"
|
||||
case $Lo in
|
||||
0|1)
|
||||
echoRgb "確認列表無誤後音量上刪除,音量下退出腳本編輯列表" "2"
|
||||
get_version "刪除" "退出腳本" && Delete_App="$branch"
|
||||
get_version "刪除" "退出腳本" && Delete_App="$branch" ;;
|
||||
2)
|
||||
Enter_options "確認列表無誤後輸入1刪除,輸入0退出腳本編輯列表" "刪除" "退出腳本" && isBoolean "$parameter" "Delete_App" && Delete_App="$nsx" ;;
|
||||
esac
|
||||
if [[ $Delete_App = true ]]; then
|
||||
i=1
|
||||
r="$(grep -v "#" "$txt3" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
|
||||
r="$(egrep -v '#|#' "$txt3" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
|
||||
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}')"
|
||||
name1="$(egrep -v '#|#' "$txt3" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
|
||||
name2="$(egrep -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"
|
||||
@@ -1593,14 +1665,14 @@ backup)
|
||||
*) echoRgb "$Compression_method為不支持的壓縮算法" "0" && exit 2 ;;
|
||||
esac
|
||||
#效驗選填是否正確
|
||||
isBoolean "$Lo" "Lo" && Lo="$nsx"
|
||||
if [[ $Lo = false ]]; then
|
||||
case $Lo in
|
||||
0)
|
||||
[[ $Backup_Mode != "" ]] && isBoolean "$Backup_Mode" "Backup_Mode" && Backup_Mode="$nsx" || {
|
||||
echoRgb "選擇備份模式\n -音量上備份應用+數據,音量下僅應用不包含數據" "2"
|
||||
get_version "應用+數據" "僅應用" && Backup_Mode="$branch"
|
||||
}
|
||||
if [[ $Backup_Mode = true ]]; then
|
||||
if [[ $(echo "$blacklist" | grep -v "#" | wc -l) -gt 0 ]]; then
|
||||
if [[ $(echo "$blacklist" | egrep -v '#|#' | wc -l) -gt 0 ]]; then
|
||||
if [[ $blacklist_mode != "" ]]; then
|
||||
isBoolean "$blacklist_mode" "blacklist_mode" && blacklist_mode="$nsx"
|
||||
else
|
||||
@@ -1629,14 +1701,14 @@ backup)
|
||||
[[ $Background_apps_ignore != "" ]] && isBoolean "$Background_apps_ignore" "Background_apps_ignore" && Background_apps_ignore="$nsx" || {
|
||||
echoRgb "存在進程忽略備份\n -音量上忽略,音量下備份" "2"
|
||||
get_version "忽略" "備份" && Background_apps_ignore="$branch"
|
||||
}
|
||||
else
|
||||
} ;;
|
||||
1)
|
||||
[[ $Backup_Mode = "" ]] && {
|
||||
echoRgb "選擇備份模式\n -音量上備份應用+數據,音量下僅應用不包含數據" "2"
|
||||
get_version "應用+數據" "僅應用" && Backup_Mode="$branch"
|
||||
} || isBoolean "$Backup_Mode" "Backup_Mode" && Backup_Mode="$nsx"
|
||||
if [[ $Backup_Mode = true ]]; then
|
||||
if [[ $(echo "$blacklist" | grep -v "#" | wc -l) -gt 0 ]]; then
|
||||
if [[ $(echo "$blacklist" | egrep -v '#|#' | wc -l) -gt 0 ]]; then
|
||||
[[ $blacklist_mode = "" ]] && {
|
||||
echoRgb "選擇黑名單模式\n -音量上不備份,音量下僅備份安裝檔" "2"
|
||||
get_version "不備份" "備份安裝檔" && blacklist_mode="$branch"
|
||||
@@ -1658,8 +1730,44 @@ backup)
|
||||
[[ $Background_apps_ignore = "" ]] && {
|
||||
echoRgb "存在進程忽略備份\n -音量上忽略,音量下備份" "2"
|
||||
get_version "忽略" "備份" && Background_apps_ignore="$branch"
|
||||
} ;;
|
||||
2)
|
||||
[[ $Backup_Mode = "" ]] && {
|
||||
Enter_options "輸入1備份應用+數據,輸入0僅應用不包含數據" "應用+數據" "僅應用" && isBoolean "$parameter" "Backup_Mode" && Backup_Mode="$nsx"
|
||||
} || {
|
||||
isBoolean "$Backup_Mode" "Backup_Mode" && Backup_Mode="$nsx"
|
||||
}
|
||||
if [[ $Backup_Mode = true ]]; then
|
||||
[[ $(echo "$blacklist" | egrep -v '#|#' | wc -l) -gt 0 ]] && {
|
||||
[[ $blacklist_mode = "" ]] && {
|
||||
Enter_options "選擇黑名單模式輸入1不備份,輸入0備份安裝檔" "不備份" "僅應用安裝檔" && isBoolean "$parameter" "blacklist_mode" && blacklist_mode="$nsx"
|
||||
} || {
|
||||
isBoolean "$blacklist_mode" "blacklist_mode" && blacklist_mode="$nsx"
|
||||
}
|
||||
}
|
||||
[[ $Backup_obb_data = "" ]] && {
|
||||
Enter_options "是否備份外部數據 即比如原神的數據包\n -輸入1備份,輸入0不備份" "備份" "不備份" && isBoolean "$parameter" "Backup_obb_data" && Backup_obb_data="$nsx"
|
||||
} || {
|
||||
isBoolean "$Backup_obb_data" "Backup_obb_data" && Backup_obb_data="$nsx"
|
||||
}
|
||||
[[ $Backup_user_data = "" ]] && {
|
||||
Enter_options "是否備份使用者數據,輸入1備份,輸入0不備份" "備份" "不備份" && isBoolean "$parameter" "Backup_user_data" && Backup_user_data="$nsx"
|
||||
} || {
|
||||
isBoolean "$Backup_user_data" "Backup_user_data" && Backup_user_data="$nsx"
|
||||
}
|
||||
fi
|
||||
[[ $backup_media = "" ]] && {
|
||||
Enter_options "全部應用備份結束後是否備份自定義目錄\n -輸入1備份,0不備份" "備份" "不備份" && isBoolean "$parameter" "backup_media" && backup_media="$nsx"
|
||||
} || {
|
||||
isBoolean "$backup_media" "backup_media" && backup_media="$nsx"
|
||||
}
|
||||
[[ $Background_apps_ignore = "" ]] && {
|
||||
Enter_options "存在進程忽略備份\n -輸入1不備份,0備份" "忽略" "備份" && isBoolean "$parameter" "Background_apps_ignore" && Background_apps_ignore="$nsx"
|
||||
} || {
|
||||
isBoolean "$Background_apps_ignore" "Background_apps_ignore" && Background_apps_ignore="$nsx"
|
||||
} ;;
|
||||
*) echoRgb "$conf_path Lo=$Lo填寫錯誤,正確值0 1 2" "0" && exit 2 ;;
|
||||
esac
|
||||
i=1
|
||||
#數據目錄
|
||||
if [[ $list_location != "" ]]; then
|
||||
@@ -1687,14 +1795,19 @@ backup)
|
||||
echoRgb "配置詳細:\n -壓縮方式:$Compression_method\n -音量鍵確認:$Lo\n -更新:$update\n -備份模式:$Backup_Mode\n -備份外部數據:$Backup_obb_data\n -備份user數據:$Backup_user_data\n -自定義目錄備份:$backup_media\n -存在進程忽略備份:$Background_apps_ignore"
|
||||
D="1"
|
||||
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
|
||||
if [[ $Apk_info != "" ]]; then
|
||||
[[ $Apk_info = *"Failure calling service package"* ]] && Apk_info="$(echo "$system\n$(appinfo -sort-i -o pn -3 2>/dev/null)" | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
|
||||
else
|
||||
Apk_info="$(echo "$system\n$(appinfo -sort-i -o pn -3 2>/dev/null)" | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
|
||||
fi
|
||||
[[ $Apk_info = "" ]] && echoRgb "Apk_info變量為空" "0" && exit
|
||||
[[ $backup_mode = "" ]] && {
|
||||
echoRgb "檢查備份列表中是否存在已經卸載應用" "3"
|
||||
while read -r ; do
|
||||
if [[ $(echo "$REPLY" | sed -E 's/^[ \t]*//; /^[ \t]*[#!]/d') != "" ]]; then
|
||||
if [[ $(echo "$REPLY" | sed -E 's/^[ \t]*//; /^[ \t]*[##!]/d') != "" ]]; then
|
||||
app=($REPLY $REPLY)
|
||||
if [[ ${app[1]} != "" && ${app[2]} != "" ]]; then
|
||||
if [[ $(echo "$Apk_info" | egrep -w "^${app[1]}$") != "" ]]; then
|
||||
if [[ $(echo "$Apk_info" | egrep -o "${app[1]}") != "" ]]; then
|
||||
[[ $Tmplist = "" ]] && Tmplist='#不需要備份的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market(忽略安裝包和數據)\n#不需要備份數據的應用請在開頭使用!注釋 比如:!酷安 com.coolapk.market(僅忽略數據)'
|
||||
Tmplist="$Tmplist\n$REPLY"
|
||||
else
|
||||
@@ -1707,7 +1820,7 @@ backup)
|
||||
done < "$txt"
|
||||
}
|
||||
[[ $Tmplist != "" ]] && echo "$Tmplist" | sed -e '/^$/d' | sort>"$txt"
|
||||
r="$(grep -v "#" "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
|
||||
r="$(egrep -v '#|#' "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
|
||||
[[ $backup_mode != "" ]] && r=1
|
||||
[[ $r = "" && $backup_mode = "" ]] && echoRgb "$MODDIR_NAME/appList.txt是空的或是包名被注釋備份個鬼\n -檢查是否注釋亦或者執行$MODDIR_NAME/生成應用列表.sh" "0" && exit 1
|
||||
if [[ $Backup_Mode = true ]]; then
|
||||
@@ -1739,7 +1852,6 @@ backup)
|
||||
fi
|
||||
filesize="$(du -s "$Backup" | awk '{print $1}')"
|
||||
Quantity=0
|
||||
restore_freeze
|
||||
#開始循環$txt內的資料進行備份
|
||||
#記錄開始時間
|
||||
en=118
|
||||
@@ -1750,7 +1862,7 @@ backup)
|
||||
#獲取預設鍵盤
|
||||
keyboard="$(settings get secure default_input_method 2>/dev/null)"
|
||||
Set_screen_pause_seconds on
|
||||
[[ $(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | awk '{print $2}' | grep -w "^${keyboard%/*}$") != ${keyboard%/*} ]] && unset keyboard
|
||||
[[ $(egrep -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")"
|
||||
@@ -1759,8 +1871,8 @@ backup)
|
||||
[[ $en -ge 229 ]] && en=118
|
||||
unset name1 name2 apk_path apk_path2
|
||||
if [[ $backup_mode = "" ]]; then
|
||||
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}')"
|
||||
name1="$(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
|
||||
name2="$(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
|
||||
else
|
||||
ChineseName="$(jq -r 'to_entries[] | select(.key != null).key' "${0%/*}/app_details.json" | head -n 1)"
|
||||
PackageName="$(jq -r '.[] | select(.PackageName != null).PackageName' "${0%/*}/app_details.json")"
|
||||
@@ -1819,16 +1931,19 @@ backup)
|
||||
if [[ $result = 0 && $No_backupdata = "" ]]; then
|
||||
if [[ $Backup_Mode = true ]]; then
|
||||
if [[ $Backup_obb_data = true ]]; then
|
||||
if [[ $name2 != *mt* ]]; then
|
||||
#備份data數據
|
||||
Backup_data "data"
|
||||
#備份obb數據
|
||||
Backup_data "obb"
|
||||
else
|
||||
echoRgb "$name1無法備份" "0"
|
||||
fi
|
||||
fi
|
||||
#備份user數據
|
||||
[[ $Backup_user_data = true ]] && Backup_data "user"
|
||||
[[ $name2 != *mt* ]] && [[ $Backup_user_data = true ]] && Backup_data "user"
|
||||
[[ $name2 = github.tornaco.android.thanos ]] && Backup_data "thanox" "$(find "/data/system" -name "thanos*" -maxdepth 1 -type d 2>/dev/null)"
|
||||
[[ $name2 = moe.shizuku.redirectstorage ]] && Backup_data "storage-isolation" "/data/adb/storage-isolation"
|
||||
Set_service
|
||||
fi
|
||||
fi
|
||||
[[ -f $Backup_folder/${name2}.sh ]] && rm -rf "$Backup_folder/${name2}.sh"
|
||||
@@ -1871,7 +1986,7 @@ backup)
|
||||
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 "#" | awk 'NF != 0 { count++ } END { print count }')"
|
||||
B="$(echo "$Custom_path" | egrep -v '#|#' | awk 'NF != 0 { count++ } END { print count }')"
|
||||
if [[ $B != "" ]]; then
|
||||
echoRgb "備份結束,備份多媒體" "1"
|
||||
notification --tag="102" --title="Media備份" --text="Media備份開始"
|
||||
@@ -1921,8 +2036,8 @@ backup)
|
||||
if [[ $backup_mode = "" ]]; then
|
||||
while [[ $i -le $r ]]; do
|
||||
unset pkg name1
|
||||
pkg="$(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
|
||||
name1="$(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
|
||||
pkg="$(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
|
||||
name1="$(egrep -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" "備份"
|
||||
@@ -1936,7 +2051,6 @@ backup)
|
||||
fi
|
||||
fi
|
||||
Set_screen_pause_seconds off
|
||||
restore_freeze
|
||||
rm -rf "$TMPDIR/scriptTMP"
|
||||
Calculate_size "$Backup"
|
||||
echoRgb "批量備份完成"
|
||||
@@ -1968,12 +2082,43 @@ Restore|Restore2)
|
||||
[[ ! -f $txt ]] && echoRgb "請執行\"重新生成應用列表.sh\"獲取應用列表再來恢復" "0" && exit 2
|
||||
sort -u "$txt" -o "$txt" 2>/dev/null
|
||||
i=1
|
||||
r="$(grep -v "#" "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
|
||||
r="$(egrep -v '#|#' "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
|
||||
[[ $r = "" ]] && echoRgb "appList.txt包名為空或是被注釋了\n -請執行\"重新生成應用列表.sh\"獲取應用列表再來恢復" "0" && exit 1
|
||||
Backup_folder2="$MODDIR/Media"
|
||||
Backup_folder3="$MODDIR/modules"
|
||||
#效驗選填是否正確
|
||||
isBoolean "$Lo" "Lo" && Lo="$nsx"
|
||||
case $Lo in
|
||||
0)
|
||||
[[ $recovery_mode != "" ]] && isBoolean "$recovery_mode" "recovery_mode" && recovery_mode="$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不同,音量上繼續恢復,下不恢復並離開腳本"
|
||||
notification --tag="105" --title="App恢復" --text="檢測當前用戶$user與恢復資料夾用戶:$Get_user不同\n -音量上繼續恢復,下不恢復並離開腳本"
|
||||
get_version "恢復安裝" "不恢復安裝" && recovery_mode2="$branch"
|
||||
fi
|
||||
if [[ -d $Backup_folder2 ]]; then
|
||||
[[ $media_recovery != "" ]] && isBoolean "$media_recovery" "media_recovery" && media_recovery="$nsx" || {
|
||||
echoRgb "是否恢復多媒體數據\n -音量上恢復,音量下不恢復" "2"
|
||||
notification --tag="105" --title="App恢復" --text="是否恢復多媒體數據,音量上恢復,音量下不恢復"
|
||||
get_version "恢復媒體數據" "跳過恢復媒體數據" && media_recovery="$branch"
|
||||
}
|
||||
fi
|
||||
if [[ -d $Backup_folder3 && $(find "$Backup_folder3" -maxdepth 1 -name "*.zip*" -type f 2>/dev/null | wc -l) != 0 ]]; then
|
||||
[[ $modules_recovery != "" ]] && isBoolean "$modules_recovery" "modules_recovery" && modules_recovery="$nsx" || {
|
||||
echoRgb "是否刷入Magisk模塊\n -音量上刷入,音量下不刷入" "2"
|
||||
notification --tag="105" --title="App恢復" --text="是否刷入Magisk模塊,音量上刷入,音量下不刷入"
|
||||
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"
|
||||
} ;;
|
||||
1)
|
||||
echoRgb "選擇應用恢復模式\n -音量上僅恢復未安裝,下全恢復"
|
||||
notification --tag="105" --title="App恢復" --text="選擇應用恢復模式,音量上僅恢復未安裝,下全恢復"
|
||||
get_version "恢復未安裝" "全恢復" && recovery_mode="$branch"
|
||||
@@ -1983,32 +2128,60 @@ Restore|Restore2)
|
||||
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
|
||||
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"
|
||||
fi
|
||||
[[ $Background_apps_ignore != "" ]] && isBoolean "$Background_apps_ignore" "Background_apps_ignore" && Background_apps_ignore="$nsx" || {
|
||||
echoRgb "存在進程忽略恢復\n -音量上忽略,音量下恢復" "2"
|
||||
get_version "忽略" "恢復" && Background_apps_ignore="$branch"
|
||||
get_version "忽略" "恢復" && Background_apps_ignore="$branch" ;;
|
||||
2)
|
||||
[[ $recovery_mode = "" ]] && {
|
||||
Enter_options "選擇應用恢復模式\n -輸入1僅恢復未安裝,0全恢復" "僅恢復未安裝" "全恢復" && isBoolean "$parameter" "recovery_mode" && recovery_mode="$nsx"
|
||||
} || {
|
||||
isBoolean "$recovery_mode" "recovery_mode" && recovery_mode="$nsx"
|
||||
}
|
||||
Get_user="$(echo "$MODDIR" | rev | cut -d '/' -f1 | cut -d '_' -f1 | rev | egrep -o '[0-9]+')"
|
||||
[[ $Get_user != $user ]] && {
|
||||
[[ $recovery_mode2 = "" ]] && {
|
||||
Enter_options "檢測當前用戶$user與恢復資料夾用戶:$Get_user不同,輸入1繼續恢復,0不恢復並離開腳本" "恢復安裝" "離開腳本" && isBoolean "$parameter" "recovery_mode2" && recovery_mode2="$nsx"
|
||||
} || {
|
||||
isBoolean "$recovery_mode2" "recovery_mode2" && recovery_mode2="$nsx"
|
||||
}
|
||||
}
|
||||
[[ $media_recovery = "" ]] && {
|
||||
Enter_options "是否恢復多媒體\n -輸入1僅恢復,0不恢復" "恢復" "不恢復" && isBoolean "$parameter" "media_recovery" && media_recovery="$nsx"
|
||||
} || {
|
||||
isBoolean "$media_recovery" "media_recovery" && media_recovery="$nsx"
|
||||
}
|
||||
[[ $modules_recovery = "" ]] && {
|
||||
Enter_options "是否刷入Magisk模塊\n -輸入1刷入 0不刷入" "刷入模塊" "跳過刷入模塊" && isBoolean "$parameter" "modules_recovery" && modules_recovery="$nsx"
|
||||
} || {
|
||||
isBoolean "$modules_recovery" "modules_recovery" && modules_recovery="$nsx"
|
||||
}
|
||||
[[ $Background_apps_ignore = "" ]] && {
|
||||
Enter_options "存在進程忽略恢復\n -輸入1不恢復,0恢復" "忽略" "恢復" && isBoolean "$parameter" "Background_apps_ignore" && Background_apps_ignore="$nsx"
|
||||
} || {
|
||||
isBoolean "$Background_apps_ignore" "Background_apps_ignore" && Background_apps_ignore="$nsx"
|
||||
} ;;
|
||||
*) echoRgb "$conf_path Lo=$Lo填寫錯誤,正確值0 1 2" "0" && exit 2 ;;
|
||||
esac
|
||||
[[ $recovery_mode2 = false ]] && exit 2
|
||||
if [[ $recovery_mode = true ]]; then
|
||||
echoRgb "獲取未安裝應用中"
|
||||
[[ $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
|
||||
Apk_info="$(pm list packages -e --user "$user" | cut -f2 -d ':' | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
|
||||
if [[ $Apk_info != "" ]]; then
|
||||
[[ $Apk_info = *"Failure calling service package"* ]] && Apk_info="$(appinfo -sort-i -o pn -a 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
|
||||
else
|
||||
Apk_info="$(appinfo -sort-i -o pn -a 2>/dev/null | egrep -v 'ice.message|com.topjohnwu.magisk' | sort -u)"
|
||||
fi
|
||||
[[ $Apk_info = "" ]] && echoRgb "Apk_info變量為空" "0" && exit
|
||||
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"
|
||||
[[ $(echo "$Apk_info" | egrep -o "${app[1]}") = "" ]] && Tmplist="$Tmplist\n$REPLY"
|
||||
}
|
||||
fi
|
||||
done < "$txt"
|
||||
@@ -2016,8 +2189,13 @@ Restore|Restore2)
|
||||
if [[ $r != "" ]]; then
|
||||
echoRgb "獲取完成 預計安裝$r個應用"
|
||||
txt="$Tmplist"
|
||||
case $Lo in
|
||||
0|1)
|
||||
echoRgb "未安裝應用列表\n$txt\n確認無誤使用音量上繼續恢復,音量下退出腳本" "1"
|
||||
get_version "恢復安裝" "退出腳本"
|
||||
get_version "恢復安裝" "退出腳本" ;;
|
||||
2)
|
||||
Enter_options "未安裝應用列表\n$txt\n-輸入1退出腳本,0恢復" "退出腳本" "恢復安裝" isBoolean "$parameter" "branch" && branch="$nsx" ;;
|
||||
esac
|
||||
[[ $branch = false ]] && exit
|
||||
else
|
||||
echoRgb "獲取完成 但備份內應用都已安裝....正在退出腳本" "0" && exit 0
|
||||
@@ -2065,8 +2243,8 @@ Restore|Restore2)
|
||||
name2="$(echo "$txt" | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
|
||||
}
|
||||
else
|
||||
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}')"
|
||||
name1="$(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $1}')"
|
||||
name2="$(egrep -v '#|#' "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${i}p" | awk '{print $2}')"
|
||||
fi
|
||||
notification --tag="105" --title="App恢復" --text="恢復 $name1 \"$name2\""
|
||||
unset No_backupdata apk_version Permissions
|
||||
@@ -2080,7 +2258,6 @@ Restore|Restore2)
|
||||
app_details="$Backup_folder/app_details.json"
|
||||
else
|
||||
echoRgb "$Backup_folder/app_details.json不存在" "0"
|
||||
exit 2
|
||||
fi
|
||||
[[ $name2 = "" ]] && echoRgb "應用包名獲取失敗" "0" && exit 1
|
||||
fi
|
||||
@@ -2098,12 +2275,12 @@ Restore|Restore2)
|
||||
fi
|
||||
if [[ $(pm path --user "$user" "$name2" 2>/dev/null) != "" ]]; then
|
||||
if [[ $No_backupdata = "" ]]; then
|
||||
[[ $name2 != *mt* ]] && {
|
||||
kill_app
|
||||
find "$Backup_folder" -maxdepth 1 ! -name "apk.*" -name "*.tar*" -type f 2>/dev/null | sort | while read; do
|
||||
Release_data "$REPLY"
|
||||
done
|
||||
unset G
|
||||
Set_service
|
||||
restore_permissions
|
||||
Ssaid="$(jq -r '.[] | select(.Ssaid != null).Ssaid' "$app_details")"
|
||||
if [[ $Ssaid != "" ]]; then
|
||||
@@ -2121,6 +2298,7 @@ Restore|Restore2)
|
||||
fi
|
||||
unset Ssaid
|
||||
fi
|
||||
}
|
||||
fi
|
||||
else
|
||||
[[ $No_backupdata = "" ]]&& echoRgb "$name1沒有安裝無法恢復數據" "0"
|
||||
@@ -2146,10 +2324,10 @@ Restore|Restore2)
|
||||
txt="$MODDIR/mediaList.txt"
|
||||
sort -u "$txt" -o "$txt" 2>/dev/null
|
||||
A=1
|
||||
B="$(grep -v "#" "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
|
||||
B="$(egrep -v '#|#' "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
|
||||
[[ $B = "" ]] && echoRgb "mediaList.txt壓縮包名為空或是被注釋了\n -請執行\"重新生成應用列表.sh\"獲取列表再來恢復" "0" && B=0
|
||||
while [[ $A -le $B ]]; do
|
||||
name1="$(grep -v "#" "$txt" 2>/dev/null | sed -e '/^$/d' | sed -n "${A}p" | awk '{print $1}')"
|
||||
name1="$(egrep -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 "$Backup_folder2/$name1"
|
||||
@@ -2178,7 +2356,6 @@ Restore|Restore2)
|
||||
fi
|
||||
let i++ en++ nskg++
|
||||
done
|
||||
restore_freeze
|
||||
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開始到結束")"
|
||||
@@ -2190,9 +2367,14 @@ Restore|Restore2)
|
||||
Restore3)
|
||||
kill_Serve
|
||||
self_test
|
||||
case $Lo in
|
||||
0|1)
|
||||
echoRgb "點錯了?這是恢復自定義資料夾腳本 如果你是要恢復應用那你就點錯了\n -音量上繼續恢復自定義資料夾,音量下離開腳本" "2"
|
||||
echoRgb "假設反悔了要終止腳本請儘速離開此腳本點擊終止腳本.sh,否則腳本將繼續執行直到結束" "0"
|
||||
get_version "恢復自定義資料夾" "離開腳本" && [[ "$branch" = false ]] && exit 0
|
||||
get_version "恢復自定義資料夾" "離開腳本" && [[ $branch = false ]] && exit 0 ;;
|
||||
2)
|
||||
Enter_options "點錯了?這是恢復自定義資料夾腳本 如果你是要恢復應用那你就點錯了\n -輸入1繼續恢復自定義資料夾,輸入0離開腳本" "恢復" "退出腳本" && isBoolean "$parameter" "branch" && branch="$nsx" && [[ $branch = false ]] && exit 0 ;;
|
||||
esac
|
||||
mediaDir="$MODDIR/Media"
|
||||
[[ -f "$mediaDir/app_details.json" ]] && app_details="$mediaDir/app_details.json"
|
||||
Backup_folder2="$mediaDir"
|
||||
@@ -2211,14 +2393,14 @@ Restore3)
|
||||
}
|
||||
starttime1="$(date -u "+%s")"
|
||||
A=1
|
||||
B="$(grep -v "#" "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
|
||||
B="$(egrep -v '#|#' "$txt" 2>/dev/null | awk 'NF != 0 { count++ } END { print count }')"
|
||||
Set_screen_pause_seconds off
|
||||
[[ $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}')"
|
||||
name1="$(egrep -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"
|
||||
@@ -2238,20 +2420,27 @@ Getlist)
|
||||
esac
|
||||
#效驗選填是否正確
|
||||
isBoolean "$debug_list" "debug_list" && debug_list="$nsx"
|
||||
isBoolean "$Lo" "Lo" && Lo="$nsx"
|
||||
if [[ $Lo = false ]]; then
|
||||
case $Lo in
|
||||
0)
|
||||
[[ $blacklist_mode != "" ]] && isBoolean "$blacklist_mode" "blacklist_mode" && blacklist_mode="$nsx" || {
|
||||
echoRgb "選擇黑名單模式\n -音量上不備份,音量下僅備份安裝檔" "2"
|
||||
get_version "不備份" "備份安裝檔" && blacklist_mode="$branch"
|
||||
}
|
||||
else
|
||||
if [[ $(echo "$blacklist" | grep -v "#" | wc -l) -gt 0 ]]; then
|
||||
echoRgb "選擇黑名單模式\n -音量上不輸出,音量下輸出應用列表" "2"
|
||||
get_version "不輸出" "輸出應用列表" && blacklist_mode="$branch"
|
||||
} ;;
|
||||
1)
|
||||
if [[ $(echo "$blacklist" | egrep -v '#|#' | wc -l) -gt 0 ]]; then
|
||||
[[ $blacklist_mode = "" ]] && {
|
||||
echoRgb "選擇黑名單模式\n -音量上不備份,音量下僅備份安裝檔" "2"
|
||||
get_version "不備份" "備份安裝檔" && blacklist_mode="$branch"
|
||||
echoRgb "選擇黑名單模式\n -音量上不輸出,音量下輸出應用列表" "2"
|
||||
get_version "不輸出" "輸出應用列表" && blacklist_mode="$branch"
|
||||
} || isBoolean "$blacklist_mode" "blacklist_mode" && blacklist_mode="$nsx"
|
||||
fi
|
||||
fi
|
||||
fi ;;
|
||||
2)
|
||||
[[ $blacklist_mode = "" ]] && {
|
||||
Enter_options "選擇黑名單模式輸入1不輸出,輸入0輸出應用列表" "不輸出" "輸出應用列表" && isBoolean "$parameter" "blacklist_mode" && blacklist_mode="$nsx"
|
||||
} || {
|
||||
isBoolean "$blacklist_mode" "blacklist_mode" && blacklist_mode="$nsx"
|
||||
} ;;
|
||||
*) echoRgb "$conf_path Lo=$Lo填寫錯誤,正確值0 1 2" "0" && exit 2 ;;
|
||||
esac
|
||||
txtpath="$MODDIR"
|
||||
[[ $debug_list = true ]] && txtpath="${txtpath/'/storage/emulated/'/'/data/media/'}"
|
||||
nametxt="$txtpath/appList.txt"
|
||||
@@ -2276,10 +2465,11 @@ Getlist)
|
||||
rb="0"
|
||||
Output_list() {
|
||||
if [[ $(cat "$nametxt" | cut -f2 -d ' ' | egrep -w "^${app_1[1]}$") != ${app_1[1]} ]]; then
|
||||
add_entry "${app_1[2]}" "${app_1[1]}" "$REPLY2"
|
||||
case ${app_1[1]} in
|
||||
*oneplus* | *miui* | *xiaomi* | *oppo* | *flyme* | *meizu* | com.android.soundrecorder | com.mfashiongallery.emag | com.mi.health | *coloros*)
|
||||
if [[ $(echo "$xposed_name" | egrep -w "${app_1[1]}$") = ${app_1[1]} ]]; then
|
||||
echoRgb "${app_1[2]}為Xposed模塊 進行添加" "0"
|
||||
echoRgb "$app_name為Xposed模塊 進行添加" "0"
|
||||
if [[ $REPLY2 = "" ]]; then
|
||||
REPLY2="$REPLY" && [[ $tmp = "" ]] && tmp="1"
|
||||
else
|
||||
@@ -2293,26 +2483,31 @@ Getlist)
|
||||
else
|
||||
REPLY2="$REPLY2\n$REPLY" && [[ $tmp = "" ]] && tmp="1"
|
||||
fi
|
||||
echoRgb "$REPLY($rgb_a)"
|
||||
echoRgb "$app_name ${app_1[1]}($rgb_a)"
|
||||
let i++
|
||||
else
|
||||
echoRgb "${app_1[2]} 預裝應用 忽略輸出" "0"
|
||||
echoRgb "$app_name 預裝應用 忽略輸出" "0"
|
||||
if [[ $REPLY2 = "" ]]; then
|
||||
REPLY2="#$REPLY" && [[ $tmp = "" ]] && tmp="1"
|
||||
else
|
||||
REPLY2="$REPLY2\n#$REPLY" && [[ $tmp = "" ]] && tmp="1"
|
||||
fi
|
||||
let rc++
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if [[ $(echo "$xposed_name" | egrep -w "${app_1[1]}$") = ${app_1[1]} ]]; then
|
||||
echoRgb "Xposed: $REPLY($rgb_a)"
|
||||
let rd++
|
||||
else
|
||||
echoRgb "$REPLY($rgb_a)"
|
||||
fi
|
||||
if [[ $REPLY2 = "" ]]; then
|
||||
REPLY2="$REPLY" && [[ $tmp = "" ]] && tmp="1"
|
||||
else
|
||||
REPLY2="$REPLY2\n$REPLY" && [[ $tmp = "" ]] && tmp="1"
|
||||
fi
|
||||
if [[ $(echo "$xposed_name" | egrep -w "${app_1[1]}$") = ${app_1[1]} ]]; then
|
||||
echoRgb "Xposed: $app_name ${app_1[1]}($rgb_a)"
|
||||
let rd++
|
||||
else
|
||||
echoRgb "$app_name ${app_1[1]}($rgb_a)"
|
||||
fi
|
||||
let i++
|
||||
;;
|
||||
esac
|
||||
@@ -2320,7 +2515,7 @@ Getlist)
|
||||
let Q++
|
||||
fi
|
||||
}
|
||||
[[ $(echo "$blacklist" | grep -v "#") != "" ]] && NZK=1
|
||||
[[ $(echo "$blacklist" | egrep -v '#|#') != "" ]] && NZK=1
|
||||
echo "$Apk_info" | sed 's/\///g ; s/\://g ; s/(//g ; s/)//g ; s/\[//g ; s/\]//g ; s/\-//g ; s/!//g' | while read; do
|
||||
[[ $rgb_a -ge 229 ]] && rgb_a=118
|
||||
app_1=($REPLY $REPLY)
|
||||
@@ -2346,16 +2541,17 @@ Getlist)
|
||||
echoRgb "\n -輸出異常 請將$conf_path中的debug_list=\"0\"改為1或是重新執行本腳本" "0"
|
||||
exit
|
||||
fi
|
||||
echoRgb "已經將預裝應用輸出至appList.txt並註釋# 需要備份則去掉#" "0"
|
||||
[[ $tmp != "" ]] && echoRgb "\n -第三方apk數量=\"$Apk_Quantity\"\n -已過濾=\"$rc\"\n -xposed=\"$rd\"\n -黑名單應用=\"$rb\"\n -存在列表中=\"$Q\"\n -輸出=\"$i\""
|
||||
fi
|
||||
let rgb_a++ LR++
|
||||
done
|
||||
if [[ -f $nametxt ]]; then
|
||||
while read -r ; do
|
||||
if [[ $(echo "$REPLY" | sed -E 's/^[ \t]*//; /^[ \t]*[#!]/d') != "" ]]; then
|
||||
if [[ $(echo "$REPLY" | sed -E 's/^[ \t]*//; /^[ \t]*[##!]/d') != "" ]]; then
|
||||
app=($REPLY $REPLY)
|
||||
if [[ ${app[1]} != "" && ${app[2]} != "" ]]; then
|
||||
if [[ $(echo "$Apk_info2" | egrep -w "^${app[1]}$") != "" ]]; then
|
||||
if [[ $(echo "$Apk_info2" | egrep -o "${app[1]}") != "" ]]; then
|
||||
[[ $Tmplist = "" ]] && Tmplist='#不需要備份的應用請在開頭使用#注釋 比如:#酷安 com.coolapk.market(忽略安裝包和數據\n#不需要備份數據的應用請在開頭使用!注釋 比如:!酷安 com.coolapk.market(僅忽略數據)'
|
||||
Tmplist="$Tmplist\n$REPLY"
|
||||
else
|
||||
@@ -2366,7 +2562,6 @@ Getlist)
|
||||
Tmplist="$Tmplist\n$REPLY"
|
||||
fi
|
||||
done < "$nametxt"
|
||||
#echo "$Tmplist"
|
||||
[[ $Tmplist != "" ]] && echo "$Tmplist" | sed -e '/^$/d' | sort>"$nametxt"
|
||||
fi
|
||||
wait
|
||||
@@ -2379,7 +2574,7 @@ backup_media)
|
||||
backup_path
|
||||
echoRgb "假設反悔了要終止腳本請儘速離開此腳本點擊終止腳本.sh,否則腳本將繼續執行直到結束" "0"
|
||||
A=1
|
||||
B="$(echo "$Custom_path" | grep -v "#" | awk 'NF != 0 { count++ } END { print count }')"
|
||||
B="$(echo "$Custom_path" | egrep -v '#|#' | awk 'NF != 0 { count++ } END { print count }')"
|
||||
if [[ $B != "" ]]; then
|
||||
starttime1="$(date -u "+%s")"
|
||||
Backup_folder="$Backup/Media"
|
||||
|
||||
1
終止腳本.sh
1
終止腳本.sh
@@ -1,6 +1,7 @@
|
||||
if [ -f "${0%/*}/tools/tools.sh" ]; then
|
||||
MODDIR="${0%/*}"
|
||||
operate="kill_script"
|
||||
conf_path="${0%/*}/backup_settings.conf"
|
||||
[[ $(find "$MODDIR" -maxdepth 1 -name "*.zip" -type f 2>/dev/null) ]] && echo "警告!此腳本不能拿來更新腳本" && exit 2
|
||||
. "$MODDIR/tools/tools.sh"
|
||||
echoRgb "等待腳本停止中,請稍後....."
|
||||
|
||||
Reference in New Issue
Block a user