QI - QuickInfo Informationssystem für die Shell
QI - Funktionen von QuickInfo
QI - Metadaten Datei
Linux Skripte ... kleine Helfer
QI - QuickInfo Übersicht
Skript zur einfachen Eingabe und Verwaltung von Notizen
ZMzettelkasten ist ein gutes System zum Erfassen, Verwalten und Verlinken von Informationen. ZMzettelkasten setzt eine laufende GUI wie Gnome, KDE oder XFCE voraus. Auf manchen Systemen ist jedoch nur eine einfache Shell gebootet, man möchte sich den zusätzlichen Aufwand der GUI ersparen und trotzdem schnell Information abspeichern.
Natürlich geht das mit VI oder einem anderen Editor immer. Wenn man sich selbst diszipliniert und weiß was man tut, ist das auch völlig ausreichend.
QI ist ein Bash Shell Skript als Framework um VIM herum, das die Verwaltung von Notizen schneller, einfacher und übersichtlicher macht. QI ist aus der Idee entstanden, das Notebook nur bis zur Shell booten zu müssen um unterwegs schnell Texte oder Notizen erfassen zu können. Das geht deutlich schneller (man spart allein ca. 1 bis 2 Minuten beim Bootvorgang) und es reicht zur Erfassung von Texten völlig aus. Ein Übernahme der Notizen in den Zettelkasten ist derzeit nur per cut'n'paste möglich. Eine halbautomatische Übernahme ist geplant.
QI - Funktionen von Quickinfo
Zu Beginn des Skripts ist ein default PFAD definiert. In diesem Directory werden die Dateien automatisch angelegt und verwaltet.
Wird QI ohne Parameter aufgerufen, so wird der mit EDITOR definierte Editor (standard ist VIM) mit dem aktuellen Datum als Dateinamen aufgerufen. Falls die Datei bereits existiert wird sie entsprechend zum Editieren geöffnet.
Die Textdatei erhält die Extension .wri - damit lässt sie sich ggf. auch unter Windows mittels Write öffnen. Write stellt zwar die Umlaute falsch dar, kann aber wenigstens mit Linux-Zeilenumbrüchen umgehen.
Zusätzlich zur Textdatei datum.wri wird eine Metadaten Datei datum.dat angelegt. In dieser Datei sollte zwischen der Zeile "info: Kurzbeschreibung" und der anschließenden Datumszeile eine kurze Beschreibung (ggf. mehrzeilig) der Informationen in der Textdatei stehen. Die erste Info-Zeile wird im Listing von qi -l
als Info angezeigt. Weiterhin wird bei jeder Änderung der datum.wri ein Zeitstempel und die Anzahl der "vorher" - "nachher" Anzahl Bytes eingetragen.
QI - Optionen:
qi -l
listet die qi-Dateien auf. Das Listing ist mit LIMIT auf die 20 neuesten Dateien beschränkt.
bernd@mars:~$ qi -l 1: 2007-07-09 = Gedanken werden zum Schicksal 2: 2007-07-07 = QI verbessert 3: 2007-07-06 = Heute mit "qi" begonnen ... das ist das erste Meta-File 4: 2007-06-19 = wichtige Dinge im Leben No. to select (q to quit)>Durch Eingabe einer Ziffer (im Beispiel 1 bis 4) wird die entsprechende Datei zum Editieren geöffnet. Wird sie verändert, wird ein neuer Zeitstempel an die entsprechende .dat Datei angehängt. [q] und/oder [Return] kehren zur Shell zurück.
qi -y
öffnet, sofern vorhanden die Datei von Gestern (yesterday).
qi -e
öffnet nach dem Schließen der Textdatei auch noch die entsprechende .dat Datei zum Bearbeiten.
qi -s "string"
sucht in den QI-Dateien nach string und listet die betreffenden Dateien auf. Auch hier wartet das Programm auf eine Eingabe. Beim Suchen werden sowohl die Text- als auch die Metadaten-Datei durchsucht. Die Suche ist nicht Case sensitiv (Umlaute sind davon ausgenommen).
bernd@mars:~$ qi -s option Suche in QI nach 'option' 1: 2007-07-06 = Heute mit "qi" begonnen ... das ist das erste Meta-File 2: 2007-07-05 = *Nachträglich zum Testen der -l Option eingefügtes File No. to select (q to quit)>Der Stern (*) vor der Dateiinfo zeigt an, dass die Datei bereits mit "done" gekennzeichnet ist und somit als bearbeitet gilt und in der Ausgabe der Option -l nicht mehr erscheint.
Optionen können auch zusammen verwendet werden. Jede Option muss dann allerdings mit eigenem Minus-zeichen versehen sein. Beispiel qi -l -e
QI - Metadaten Datei:
Zu jeder datum.wri-Datei wird automatisch eine Metadaten Datei datum.dat erzeugt. In dieser Datei werden von QI automatisch Daten eingetragen. Manuell sollte man in dieser Datei nach der Zeile, die mit info: beginnt, eine kurze Zusammenfassung des Textes einfügen. Dazu wird die Metadaten-Datei nach dem ersten Text-Editieren automatisch geöffnet. Will man nachträglich die Meta-Daten nochmal per Hand ändern, so ist qi mit der Option -e auzurufen.
info: Kurzbeschreibung QI verbessert Dies ist eine zweite Infozeile, die im Listing jedoch nicht erscheint Sa 7. Jul 08:48:57 CEST 2007 new:17 Sa 7. Jul 08:50:17 CEST 2007 old:17 - new:35 ...Die Zeilen 1, 4, 5, ff wurden automatisch eingefügt. Beim ersten Editiervorgang wird die Metadaten-Datei automatisch geöffnet, damit man die Kurzbeschreibung eintragen kann. Dazu einfach eine Zeile hier info: ... (als zweite Zeile) eintragen. Diese Zeile wird dann im Listing angezeigt. Sie sollte eine Kurzbeschreibung zu der Textdatei liefern. Die 3te Zeile des Beispiels wird nicht ausgegeben.
info: done Nachträglich zum Testen der -l Option eingefügtes FileSteht in der Zeile "info:" irgendwo der String "done", wird die QI-Datei als bearbeitet angesehen und taucht im normalen Listing nicht mehr auf. info: muss am Zeilenanfang stehen.
Das Shell Script QI
Das Skript kann einfach per copy and paste übernommen werden. Mit den Variablen zu Beginn des Scripts kann es leicht an die eigenen Wünsche angepasst werden.#!/bin/bash ###################################################################### # Title : qi - QuickInfo # Author : Bernd Holzhauer {bholz@cc-c.de} # Date : 2007-07-21 # Requires : awk, vim # Category : File Utilities ###################################################################### # Description # Script to enter and store quickly information from normal shell # plus creating and maintaining a related metafile # Note: # - ###################################################################### ### set variables here ### PFAD="/home/bernd/daten/info/qi" EXT="wri" EDITOR="/usr/bin/vim" LIMIT=20 ### --- do not edit below --- ### PN=`basename "$0"` # Program name VER='0.5' Usage () { echo >&2 "$PN - Quick Input, $VER usage: $PN [-opt] [filename] -h to show a short help -? will show this message " exit 1 } Help () { echo >&2 "$PN - Quick Information Input, Version $VER The programm calls vim with current_date.txt as default filename. Plus a Metadata file .dat is also created. Valid options: -e edit *.dat file, too -l list info files -s \"such string\" -y edit yesterdays file -h to show a short help -? will show this message ...." exit 1 } while [ $# -gt 0 ] do case "$1" in -e) EDIT=true;; -h) Help;; -l) LIST=true;; -s) SUCHE=true; shift; STRING=$1;; -y) YD=1;; -?) Usage;; *) Usage;; esac shift done NAME=`date +%Y-%m-%d` if [ $YD ]; then NAME=`date -d 'yesterday' +%F`; fi if [ ! -d $PFAD ]; then echo "Directory $PFAD nicht gefunden" exit fi ### real working starts here ### if [ $YD ] && [ ! -f $PFAD/$NAME.$EXT ]; then echo "Yesterdays file does not exist" exit fi ### list files and prompt for selection ### if [ $LIST ]; then idx=1 _VAL=0 for i in `ls -r $PFAD/*.dat` ; do FILE=${i##/*/} FILE=${FILE%.*} files[idx]=$FILE let _VAL=`grep "info:" $i | grep "done" | wc -l` ### do not list files if "done" is in info: line ### if (( $_VAL == 0 )); then INFO=`grep -1 info: $i | tail -1` echo " $idx: $FILE = $INFO" let idx=$idx+1 else _VAL=0 fi ### limit list to 20 files ### if (( $idx > 20 )); then break; fi done ### promt for selection ### read -e -p "No. to select (q to quit)> " ANS if [ "$ANS" == "q" ] || [ "$ANS" == "" ]; then exit fi let i=$ANS if (( $i > 0 )) && (( $i < $idx )); then NAME=${files[i]} else exit fi fi ### suche in files and prompt for selection ### if [ $SUCHE ]; then echo "Suche in QI nach '$STRING'" idx=1 _VAL=0 for i in `ls -r $PFAD/20*` ; do FILE=${i##/*/} _EXT=${FILE#*.} FILE=${FILE%.*} files[idx]=$FILE let VAL=`grep -i "$STRING" $i | wc -l` if (( $VAL > 0 )) || (( $_VAL > 0 )); then if [ "$_EXT" == "dat" ]; then let DEL=`grep "info:" $i | grep "done" | wc -l` if (( $DEL > 0 )); then DEL="*"; else DEL=" "; fi INFO=`grep -1 info: $i | tail -1` echo " $idx: $FILE = $DEL$INFO" let idx=$idx+1 _VAL=0 else _VAL=1 fi fi ### limit list to $LIMIT files ### if (( $idx > $LIMIT )); then break; fi done if (( $idx > 1 )); then read -e -p "No. to select (q to quit)> " ANS if [ "$ANS" == "q" ] || [ "$ANS" == "" ]; then exit fi else exit fi let i=$ANS if (( $i > 0 )) && (( $i < $idx )); then NAME=${files[i]} else exit fi fi ### edit file(s) ### $EDITOR $PFAD/$NAME.$EXT # if file exits if [ -f $PFAD/$NAME.$EXT ]; then DATE=`date` NEW=`wc -m $PFAD/$NAME.$EXT | awk '{print $1}'` if [ -f $PFAD/$NAME.dat ]; then OLD=`grep "new:" $PFAD/$NAME.dat | tail -1` OLD=${OLD#*new:} #echo "+ old=$OLD - new=$NEW" if (( $OLD != $NEW )); then echo "$DATE old:$OLD - new:$NEW" >> $PFAD/$NAME.dat; fi else echo "info: Kurzbeschreibung" > $PFAD/$NAME.dat echo "$DATE new:$NEW" >> $PFAD/$NAME.dat EDIT=true fi fi if [ $EDIT ]; then $EDITOR $PFAD/$NAME.dat fi
Warenzeichen und Marken sind Eigentum der jeweiligen Besitzer.
Das Ing.Büro Bernd Holzhauer distanziert sich grundsätzlich von gesetzeswidrigen und möglicherweise illegalen Inhalten in Seiten, auf die über www.cc-c.de verwiesen wird. Sollte Ihnen diesbezüglich etwas auffallen, melden Sie es uns bitte per email.