[PYTHON] Restaurer le fichier de sauvegarde de l'iPhone

introduction

Je voulais voir les fichiers de mon iPhone sur mon ordinateur, j'ai donc restauré les fichiers créés lorsque j'ai sauvegardé mon iPhone avec iTunes. La raison était que je voulais pouvoir voir les discussions et les photos de mon PC au cas où les données LINE disparaîtraient lors de la migration de l'iPhone. J'utilise Windows, mais Windows a des applications qui parcourent directement le contenu de l'iPhone. Cependant, je ne lui faisais pas vraiment confiance et je ne voulais pas y accéder directement à l'intérieur de l'iPhone, j'ai donc cherché un moyen de restaurer le fichier de sauvegarde.

L'environnement est le suivant.

Emplacement et configuration du fichier de sauvegarde

endroit

Lorsque vous sauvegardez votre iPhone avec iTunes, un fichier de sauvegarde est créé dans le dossier suivant. Notez que vous devez vous assurer de ne pas «chiffrer» lors de la sauvegarde avec iTunes.

C:\Users\[username]\Apple\MobileSync\Backup\XXXXX

«XXXXX» est une chaîne de caractères qui semble être différente pour chaque environnement. Si vous avez plusieurs sauvegardes, vous avez plusieurs dossiers. Notez que l'emplacement du dossier est différent sur iOS (iTunes?) Il y a quelque temps.

Constitution

Les données de sauvegarde de l'iPhone sont contenues dans le dossier «XXXXX» ci-dessus. Les principaux fichiers sont les suivants.

Il semble y avoir d'autres informations, mais je ne les ai pas analysées davantage.

Script Python à restaurer

J'ai créé un script Python qui génère le nom de fichier d'origine pour tous les fichiers de sauvegarde. La gestion des erreurs n'est pas effectuée correctement.

--Depuis qu'il a été créé avec Python 3.7 sous Windows, vous devez changer le délimiteur de chemin sur Mac. Je voudrais changer '\\' dans le fichier source en '/', mais je ne l'ai pas essayé sauf sous Windows.

restore.py


import os
import shutil
import sqlite3


#Séparez le chemin dans un répertoire et un nom de fichier
#(Exemple)
# Input: '.\\output\\Library\\Logs\\test.log'
# Output: ('.\\output\\Library\\Logs\\', 'test.log')
def get_dst_filepath(relative_filepath):
    path_array = relative_filepath.split('\\')

    dst_path = ''
    for direcoty_name in path_array[0:-1]:
        dst_path += direcoty_name + '\\'

    filename = path_array[-1]

    return dst_path, filename


#Définition du chemin
src_basepath = r'C:\Users\username\Apple\MobileSync\Backup\00000000-0000000000000000'
dst_basepath = r'.\output'
db_filepath = src_basepath + '\Manifest.db'

#Connexion DB
connection = sqlite3.connect(db_filepath)
cursor = connection.cursor()
cursor.execute('SELECT fileID, relativePath, flags FROM Files')
result = cursor.fetchall()
connection.close()

###Description du champ DB#######################
# fileID:Nom de fichier dans le répertoire de sauvegarde
# relativePath:Chemin relatif
# flags = 1:Le fichier d'origine existe dans le répertoire de sauvegarde
# flags = 2:Le fichier d'origine n'existe pas dans le répertoire de sauvegarde
#############################################

#Traitement pour chaque fichier
for row in result:
    src_filename = row[0]
    dst_relative_path = row[1].replace('/', '\\')
    src_exists = row[2] is 1

    src_filepath = src_basepath + '\\' + src_filename[0:2] + '\\' + src_filename
    dst_filepath, dst_filename = get_dst_filepath(dst_basepath + '\\' + dst_relative_path)

    #Ignorer si le fichier d'origine n'est pas dans le répertoire de sauvegarde
    if not src_exists:
        continue

    print('{}\t{}\t{}'.format(src_filepath, dst_filepath, dst_filename))

    try:
        #Créer un répertoire de manière récursive
        os.makedirs(dst_filepath, exist_ok=True)
        #Copier un fichier
        shutil.copy2(src_filepath, dst_filepath+'\\'+dst_filename)
    except :
        pass

Le contenu du fichier, etc.

Voici quelques chemins de fichiers pour référence.

--Fichier photo: Media \ DCIM --LINE data (discussion): Library \ Application Support \ PrivateStore \ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \ Messages \ Line.sqlite

Les références

Je l'ai recherché il y a environ 5 ans, donc je ne me souviens pas de l'URL à laquelle je faisais référence. L'emplacement et la structure de fichier du fichier examiné à ce moment-là sont différents de maintenant.

Recommended Posts

Restaurer le fichier de sauvegarde de l'iPhone
Faire une sauvegarde incrémentielle de Linux (restauration)