Bash-Skript zum Verarbeiten von Android-SMS-Backups

Jimini

PCGH-Community-Veteran(in)
Aloha,
ich nutze zum Sichern meiner SMS die Android-App SMS to Text. Diese speichert alle SMS in einer Textdatei. Diese Datei ist zwar super lesbar, ich speichere meine SMS aber seit Jahren einzeln nach dem folgenden Schema:

Ausgang
|________ Person A
|________ Person B

Eingang
|________ Person A
|________ Person B

Also müsste die große Datei aufgedröselt und jede Zeile in einer eigenen Datei gespeichert werden. Zudem wird eine Sortierung nach Ausgang und Eingang sowie den Personen benötigt. Um das nicht von Hand machen zu müssen, habe ich mir ein kleines Bashskript geschrieben:

Code:
#!/bin/bash
grep -P '\tin' $1 | sed 's/\t/ /g' | sed 's/n\ 0/n\ +49/g' > in
grep -P '\tout' $1 | sed 's/\t/ /g' | sed 's/t\ 0/t\ +49/g' > out
#in
cat in | while read ZEILE; do
        DATUM=$(echo $ZEILE | cut -c 1-10)
        ZEIT=$(echo $ZEILE | cut -c 12-19)
        if [ "$(echo $ZEILE | cut -d ' ' -f5 | grep -P '(\+|[0-9])')" ];
                then NACHNAME=$(echo $ZEILE | cut -d ' ' -f5) && VORNAME='' && KOMMA='';
                else NACHNAME=$(echo $ZEILE | cut -d ' ' -f6) && VORNAME=$(echo $ZEILE | cut -d ' ' -f5) && KOMMA=', ';
        fi
        NAME=`echo $NACHNAME$KOMMA$VORNAME`
        mkdir -p "Eingang/$NAME"
        echo $ZEILE > "Eingang/$NAME/$DATUM - $ZEIT - $NAME.txt"
done

# out
cat out | while read ZEILE; do
        DATUM=$(echo $ZEILE | cut -c 1-10)
        ZEIT=$(echo $ZEILE | cut -c 12-19)
        if [ "$(echo $ZEILE | cut -d ' ' -f5 | grep -P '(\+|[0-9])')" ];
                then NACHNAME=$(echo $ZEILE | cut -d ' ' -f5) && VORNAME='' && KOMMA='';
                else NACHNAME=$(echo $ZEILE | cut -d ' ' -f6) && VORNAME=$(echo $ZEILE | cut -d ' ' -f5) && KOMMA=', ';
        fi
        NAME=`echo $NACHNAME$KOMMA$VORNAME`
        mkdir -p "Ausgang/$NAME"
        echo $ZEILE > "Ausgang/$NAME/$DATUM - $ZEIT - $NAME.txt"
done
rm in out
Das Skript arbeitet wie folgt:
- das Skript wird über ./skript.sh smssicherung aufgerufen
- die Datei "smssicherung" wird zunächst in gesendete und empfangene SMS aufgeteilt, diese werden in "out" bzw. "in" geschrieben
- "in" und "out" werden zeilenweise gelesen, dabei werden die Variablen definiert
- ist statt eines Namens nur eine Nummer verfügbar (beispielsweise bei SMS vom Provider), so wird dies berücksichtigt
- für jede Person / Nummer wird ein Ordner in "Eingang" bzw. "Ausgang" erstellt, wo dann die einzelnen SMS landen

Folgendes ist beim Ausführen des Skripts zu beachten:
- das Skript muss gespeichert und mit "chmod +x skript.sh" ausführbar gemacht werden (ich setze mal voraus, dass die Partition nicht mit "noexec" gemountet ist)
- das Skript arbeitet nur mit von "SMS to Text" erstellten Sicherungen zusammen. Für alle anderen Apps müsste das Skript entsprechend angepasst werden.
- Namen werden nach dem Schema "Vorname Nachname" gesucht. Bei mehrfachen Vornamen à la "Heinz Horst Müller" kommt das Skript durcheinander, da es die Leerzeichen als Trennzeichen nutzt

Kleine Anmerkung meinerseits: das Skript ist natürlich nicht großartig optimiert, mit entsprechenden Bash-Kenntnissen kann man das sicherlich eleganter lösen. Ich habe damit aber testweise rund 10000 SMS sortiert, was gut geklappt hat :)

MfG Jimini

P.S.: ich habe den Thread hier erstellt, da zum Ausführen Bash benötigt wird - und diese wird man am ehesten bei den Nutzern vorfinden, die dieses Subforum frequentieren ;)
 
Zurück