Ich habe ein 30-GB-Festplatten-Image einer verteilten Partition (glaube ich dd if=/dev/sda1 of=diskimage
), von der ich einige Textdateien wiederherstellen muss. Daten-Carving-Tools foremost
funktionieren zum Beispiel nur mit Dateien mit klar definierten Kopfzeilen, also nicht mit einfachen Textdateien. Deshalb habe ich mich auf meinen guten Freund verlassen strings
.
strings diskimage > diskstrings.txt
produzierte eine 3 GB große Textdatei, die eine Reihe von Zeichenfolgen enthielt, meistens nutzloses Zeug, gemischt mit dem Text, den ich eigentlich haben möchte.
Der größte Teil der Kruft besteht aus langen, ungebrochenen Kauderwelschfäden. Das Material, an dem ich interessiert bin, ist garantiert kleiner als 16 KB, also werde ich die Datei nach Zeilenlänge filtern. Hier ist das Python-Skript, mit dem ich das mache:
infile = open ("infile.txt" ,"r");
outfile = open ("outfile.txt","w");
for line in infile:
if len(line) < 16384:
outfile.write(line)
infile.close()
outfile.close()
Dies funktioniert, aber zum späteren Nachschlagen: Gibt es magische einzeilige Beschwörungsformeln (think awk
, sed
), die eine Datei nach Zeilenlänge filtern würden?