mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-11 20:34:02 +01:00
raspberry_pi_nextcloud.sh 1276 -> 163, root_bl9000.sh 1116 -> 211, lookup_docs.sh 942 -> 165. Sixteen new libs. lookup_python was one 300-line function; its keyword-to-anchor mapping became python_keyword_doc, emitting result and desc tab-separated so the caller keeps its control flow. bl9000_mtkclient had cd X; work; cd - with three return paths. install_mtkclient became a subshell; extract_boot_with_mtkclient could not, since it exports BOOT_IMG - so the venv check moved before the cd, the cd is guarded, and the restores use a saved $PWD. Four more unguarded cd calls fixed, and a third instance of the lib chaining bug flattened. lookup_docs.sh had no SCRIPT_DIR at all. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011w2Pj4Ek3ZNMQVYcFHgXDY
166 lines
6.5 KiB
Bash
Executable File
166 lines
6.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Device data backup before rooting.
|
|
#
|
|
# Sourced by root_bl9000.sh; split out to keep bl9000_deps.sh under the
|
|
# 250-line cap. Sourced rather than run, so it inherits the caller's
|
|
# strict mode and the variables defined above the source line.
|
|
|
|
backup_device_data() {
|
|
print_header "Backing Up Device Data"
|
|
|
|
local backup_dir
|
|
backup_dir="${WORK_DIR}/backup_$(date +%Y%m%d_%H%M%S)"
|
|
mkdir -p "$backup_dir"
|
|
|
|
log "Backup directory: $backup_dir" # Check device connection first
|
|
if ! adb get-state > /dev/null 2>&1; then
|
|
error "Device not connected. Please connect your device first."
|
|
return 1
|
|
fi
|
|
|
|
log "Starting comprehensive backup process..."
|
|
|
|
# 1. Backup internal storage (DCIM, Pictures, Documents, Downloads, etc.)
|
|
log "Backing up internal storage (this may take a while)..."
|
|
local storage_dirs=("DCIM" "Pictures" "Documents" "Download" "Music" "Movies" "WhatsApp" "Telegram")
|
|
|
|
for dir in "${storage_dirs[@]}"; do
|
|
if adb shell "[ -d /sdcard/$dir ]" 2> /dev/null; then
|
|
log " → Backing up /sdcard/$dir..."
|
|
if adb pull "/sdcard/$dir" "$backup_dir/$dir" 2>&1 | grep -v "^$"; then
|
|
log " ✓ $dir backed up successfully"
|
|
else
|
|
warn " ⚠ Could not backup $dir (may be empty or inaccessible)"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# 2. Backup SMS/MMS (if possible)
|
|
log "Backing up SMS/MMS database..."
|
|
if adb shell "su -c 'cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/mmssms.db'" 2> /dev/null; then
|
|
adb pull /sdcard/mmssms.db "$backup_dir/mmssms.db" 2> /dev/null && log " ✓ SMS/MMS backed up"
|
|
adb shell "rm /sdcard/mmssms.db" 2> /dev/null || true
|
|
else
|
|
warn " ⚠ SMS/MMS backup requires root (skipping)"
|
|
fi
|
|
|
|
# 3. Backup contacts
|
|
log "Backing up contacts..."
|
|
if adb shell "su -c 'cp /data/data/com.android.providers.contacts/databases/contacts2.db /sdcard/contacts2.db'" 2> /dev/null; then
|
|
adb pull /sdcard/contacts2.db "$backup_dir/contacts2.db" 2> /dev/null && log " ✓ Contacts backed up"
|
|
adb shell "rm /sdcard/contacts2.db" 2> /dev/null || true
|
|
else
|
|
warn " ⚠ Contacts backup requires root (skipping)"
|
|
fi
|
|
|
|
# 4. Backup call logs
|
|
log "Backing up call logs..."
|
|
if adb shell "su -c 'cp /data/data/com.android.providers.contacts/databases/calllog.db /sdcard/calllog.db'" 2> /dev/null; then
|
|
adb pull /sdcard/calllog.db "$backup_dir/calllog.db" 2> /dev/null && log " ✓ Call logs backed up"
|
|
adb shell "rm /sdcard/calllog.db" 2> /dev/null || true
|
|
else
|
|
warn " ⚠ Call logs backup requires root (skipping)"
|
|
fi
|
|
|
|
# 5. Backup app list
|
|
log "Backing up installed apps list..."
|
|
adb shell "pm list packages -f" > "$backup_dir/installed_apps.txt"
|
|
log " ✓ App list saved to installed_apps.txt"
|
|
|
|
# 6. Backup APKs for user-installed apps (optional, can be large)
|
|
if confirm "Backup APK files for installed apps? (This can take a long time and use lots of space)"; then
|
|
log "Backing up user-installed APKs..."
|
|
local apk_dir="$backup_dir/apks"
|
|
mkdir -p "$apk_dir"
|
|
|
|
# Get user-installed packages
|
|
local user_apps
|
|
user_apps=$(adb shell "pm list packages -3 -f" | sed 's/package://' | cut -d'=' -f2)
|
|
|
|
local count=0
|
|
while IFS= read -r pkg; do
|
|
if [[ -n $pkg ]]; then
|
|
log " → Backing up $pkg..."
|
|
local apk_path
|
|
apk_path=$(adb shell "pm path $pkg" | head -n1 | sed 's/package://')
|
|
if [[ -n $apk_path ]]; then
|
|
adb pull "$apk_path" "$apk_dir/${pkg}.apk" > /dev/null 2>&1 && count=$((count + 1))
|
|
fi
|
|
fi
|
|
done <<< "$user_apps"
|
|
|
|
log " ✓ Backed up $count APK files"
|
|
fi
|
|
|
|
# 7. Full ADB backup (app data, if device supports it)
|
|
log "Creating full ADB backup (app data)..."
|
|
if confirm "Create full ADB backup? (You'll need to confirm on your device)"; then
|
|
echo
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo " On your phone: Tap 'Back up my data' when prompted"
|
|
echo " You can set a password or leave it blank"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo
|
|
|
|
if adb backup -apk -shared -all -system -f "$backup_dir/full_backup.ab"; then
|
|
log " ✓ Full ADB backup completed"
|
|
log " Note: Restore with: adb restore full_backup.ab"
|
|
else
|
|
warn " ⚠ ADB backup failed or was cancelled"
|
|
fi
|
|
fi
|
|
|
|
# 8. Backup device info
|
|
log "Saving device information..."
|
|
{
|
|
echo "Device Backup Information"
|
|
echo "========================="
|
|
echo "Date: $(date)"
|
|
echo
|
|
echo "Device Model: $(adb shell getprop ro.product.model | tr -d '\r\n')"
|
|
echo "Android Version: $(adb shell getprop ro.build.version.release | tr -d '\r\n')"
|
|
echo "Build Number: $(adb shell getprop ro.build.display.id | tr -d '\r\n')"
|
|
echo "Security Patch: $(adb shell getprop ro.build.version.security_patch | tr -d '\r\n')"
|
|
echo "Serial: $(adb shell getprop ro.serialno | tr -d '\r\n')"
|
|
echo
|
|
echo "Installed Apps:"
|
|
adb shell "pm list packages -3" | sed 's/package:/ - /'
|
|
} > "$backup_dir/device_info.txt"
|
|
|
|
log " ✓ Device info saved"
|
|
|
|
# Summary
|
|
local backup_size
|
|
backup_size=$(du -sh "$backup_dir" 2> /dev/null | cut -f1 || echo "unknown")
|
|
|
|
echo
|
|
echo -e "${GREEN}╔═══════════════════════════════════════════════════════╗${NC}"
|
|
echo -e "${GREEN}║ Backup Completed Successfully! ║${NC}"
|
|
echo -e "${GREEN}╚═══════════════════════════════════════════════════════╝${NC}"
|
|
echo
|
|
log "Backup location: $backup_dir"
|
|
log "Backup size: $backup_size"
|
|
echo
|
|
echo "What was backed up:"
|
|
echo " ✓ Photos (DCIM)"
|
|
echo " ✓ Pictures"
|
|
echo " ✓ Documents"
|
|
echo " ✓ Downloads"
|
|
echo " ✓ Music"
|
|
echo " ✓ Movies"
|
|
echo " ✓ WhatsApp data (if present)"
|
|
echo " ✓ Telegram data (if present)"
|
|
echo " ✓ Installed apps list"
|
|
echo " ✓ Device information"
|
|
if [[ -f "$backup_dir/full_backup.ab" ]]; then
|
|
echo " ✓ Full app data backup"
|
|
fi
|
|
if [[ -d "$backup_dir/apks" ]]; then
|
|
echo " ✓ APK files"
|
|
fi
|
|
echo
|
|
log "Keep this backup safe! You'll need it to restore your data after rooting."
|
|
|
|
return 0
|
|
}
|