TUTORIAL: Come fare un backup dei memo vocali dell'iPhone/iPad su LINUX (Debian)!
-
Il mio problema coi memo vocali è stato che ne avevo quasi 800 e non riuscivo a passarli al PC Linux in quanto la rotellina dell'iPad era ferma allo 0% e diceva sempre "Preparo..." senza esportare nulla su Telegram, LocalSend, File, ecc.
L'unica strada è stata quella del terminale di Linux e Python, in quanto iTunes non è disponibile su Linux (nemmeno con Wine funziona al 100%) e Clementine, VLC e Strawberry Music Player si sono rivelati inutili nella sincronizzazione tra Linux e iOS.
È venuto in soccorso ChatGPT e la maieutica di Socrate con la quale l'ho interrogato e sono riuscito ad arrivare ad una soluzione per me e... per voi!Ho testato questa procedura con:
- iPad con iOS 26
- Debian 13 Trixie
- Trinity Desktop Environment (TDE)
- Konsole
1. BACKUP COMPLETO
1.1 Collegate il dispositivo iOS (es. iPad) al computer, autorizzate quello che c'è da autorizzare
1.2. Aprite Konsole e mandate:
sudo apt update
sudo apt install libimobiledevice-1.0-6 libimobiledevice-utils ifuse python3 python3-pip sqlite3
1.3. Verifica che Debian rileva il dispositivo:
ideviceinfo
1.4. ATTENZIONE: come utenti NON root, mandate:
mkdir -p ~/iOSBackup
Questo vi creerà una cartella nella vostra /home/nome-utente-del-computer
1.5. Accertati di avere spazio sul PC per il backup (per esempio dalle impostazioni del dispositivo iOS risulta che il mio iPad ha 50 GB di spazio occupato e il backup sul PC è venuto a pesare 20 GB) ed esegui il backup completo mandando:
idevicebackup2 backup ~/iOSBackup
1.6. Quando il backup sarà terminato vedrete dentro la cartella "iOSBackup" un'altra cartella con dei numeri e delle lettere strane. Apritela e vedrete molte cartelle, all'interno delle quali rimarrete delusi nel constatare che APPARENTEMENTE il backup non è riuscito come ALMENO credevate.
Occorre perciò portare alla luce tutti i vostri file, ma in questo tutorial ci limitiamo a recuperare i memo vocali (che è dove mi sono spinto io grazie a ChatGPT e alle scarsissime conoscenze che ho per queste cose).2. COME ESTRARRE I MEMO VOCALI
2.1. Per ottenere i file .m4a (il vero formato dei memo vocali di iOS) leggibili devi usare Python dal terminale (es. Konsole) + lo script "iphonemediakit"
2.2. Manda sul terminale come root:
sudo apt install python3.13-venv
2.3. Ora dobbiamo creare l'ambiente virtuale venv nella nostra home.
Quindi creiamo il virtualenv nella nostra home con:python3 -m venv ~/venv
Ora propongo due strade per estrarre i memo vocali. Un metodo non consigliato e un metodo consigliato. Vi consiglio di passare direttamente al punto 4.
3. METODO NON CONSIGLIATO: COME ESTRARRE I MEMO VOCALI (ATTENZIONE: SENZA RINOMINARLI SULLA BASE DEI METADATI)
3.4. Attiviamo l'ambiente con:
source ~/venv/bin/activate
Qui vedremo che il prompt del terminale cambia in (venv) nome-utente ecc.
3.5. I memo vocali stanno nel backup come file .m4a con i riferimenti salvati in un database SQLite.
Puoi estrarli con sqlite3 e una ricerca mirata.
Manda nel terminale (ATTENZIONE: sostituisci le 8 cifre iniziali di seguito con quelle della tua cartella di backup!!!)
cd ~/iOSBackup/00008030*/
sqlite3 Manifest.db "SELECT fileID, relativePath FROM Files WHERE relativePath LIKE '%Recordings/%';"
Poi basta copiarli in massa:
mkdir -p ~/Desktop/MemoVocali
sqlite3 Manifest.db "SELECT fileID FROM Files WHERE relativePath LIKE '%Recordings/%';" | while read fid; do
cp "${fid:0:2}/$fid" ~/Desktop/MemoVocali/
done
Ti ritrovi i memo vocali grezzi in ~/Desktop/MemoVocali/ ma non saranno ancora in .m4a ma in "hash" senza un'estensione. A noi servirà mettere ad essi un'estensione e mettere ad essi i metadati (la data e l'ora delle registrazioni).
2.6 Per rinominare tutti i file con l'estensione .m4a, inserisci nel terminale:
cd ~/Desktop/MemoVocali
for f in *; do
mv "$f" "$f.m4a"
done
4. METODO CONSIGLIATO: COME ESTRARRE I MEMO VOCALI RINOMINANDOLI COI METADATI
4.1. Ora procediamo a rinominarli grazie al file Manifest.db, presente già nel nostro backup completo della cartella home: è un database SQLite che dice quale hash corrisponde a quale percorso originale sul dispositivo iOS.
ChatGPT mi ha creato uno script adatto a questo. Crea un documento vuoto sul tuo desktop e rinominalo (togliendo le virgolette): "extract_voicememos.py"4.2. Apri il file appena creato con Kate o Kwrite e copia e incolla questo script (ATTENZIONE: cambia la voce "nome-utente" con il nome utente del tuo computer, e il nome della cartella "00008030-0012712E3ADB402E" con il nome della cartella effettiva del TUO backup, non il mio) :
#!/usr/bin/env python3
import os
import sqlite3
import shutil
import re
# --- Configurazioni ---
BACKUP_DIR = "/home/nome-utente/iOSBackup/00008030-0012712E3ADB402E"
DB_PATH = os.path.join(BACKUP_DIR, "Manifest.db")
OUTPUT_DIR = os.path.join(os.path.expanduser("~/Desktop/VoiceMemos"))
# Crea la cartella di destinazione se non esiste
os.makedirs(OUTPUT_DIR, exist_ok=True)
# Connessione al database
conn = sqlite3.connect(DB_PATH)
cur = conn.cursor()
# Query per recuperare fileID e relativePath dei voice memos
query = """
SELECT fileID, relativePath
FROM Files
WHERE relativePath LIKE '%Recordings%'
"""
cur.execute(query)
rows = cur.fetchall()
print(f"Trovati {len(rows)} file voice memo.")
# Funzione per convertire nome originale in YYYY-MM-DD HH-MM-SS
def format_filename(original_name):
# Estrae data e ora dal nome (supporta sia m4a che .composition)
m = re.search(r'(\d{8})[ _]?(\d{6})', original_name)
if m:
date_part = m.group(1) # es: 20240326
time_part = m.group(2) # es: 152834
formatted = f"{date_part[:4]}-{date_part[4:6]}-{date_part[6:]} {time_part[:2]}-{time_part[2:4]}-{time_part[4:]}.m4a"
return formatted
else:
# fallback se non trova data/ora: usa hash + m4a
return original_name + ".m4a"
# Ciclo su tutti i file
for fileID, relativePath in rows:
subdir = fileID[:2] # sottocartella in cui iOS mette il file
original_file = os.path.join(BACKUP_DIR, subdir, fileID)
# Prende solo il nome del file dall'originalPath
original_name = os.path.basename(relativePath)
# Genera nome finale leggibile
new_name = format_filename(original_name)
dest_file = os.path.join(OUTPUT_DIR, new_name)
# Copia il file se esiste
if os.path.exists(original_file):
shutil.copy2(original_file, dest_file)
print(f"✅ Copiato: {original_file} → {dest_file}")
else:
print(f"⚠️ File non trovato: {original_file}")
# Chiude il DB
conn.close()
print("🎉 Operazione completata! Tutti i voice memos sono sul Desktop.")
4.3. vai sul tuo Desktop, fai clic destro col mouse e seleziona la voce per aprire il terminale lì.
Manda:
python3 extract_voicememos.py
4.4. Troverai tutti i memo vocali rinominati nella cartella ~/Desktop/VoiceMemos.
-
Grazie @pinguinotattico per questo tuo contributo, che potrà essere utile ad altri!
-
Grazie @pinguinotattico per questo tuo contributo, che potrà essere utile ad altri!
@clarintux è stato un piacere!