Logo


Computer Communication & Consulting

Linux - BASH Scripts

letzte Änderung 14.10.2007

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 File
Steht 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
Listing: QI Shell Script © Bernd Holzhauer




Home Page
Ranking-Hits
Copyright © 2001-2014 Bernd Holzhauer. Alle Rechte vorbehalten.
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.