Mehrere Dateien umbenennen mit Bash und Vim

Folgendes Problem: Viele, viele Dateien sollen umbenannt werden. Richtig praktisch für eine solche Aufgabe fand ich bisher nur das Programm Bulk-Renamer, welches Bestandteil des Dateimanagers Thunar ist. Sucht man im Internet weiter, findet man schnell weitere grafische Lösungsmöglichkeiten unter Linux.
Ich möchte die Anzahl solcher Zubehörprogramme möglichst klein halten und unabhängig von Desktopumgebungen oder Programmbibliotheken sein. Gerade ein solches Problem ruft förmlich nach einer schnellen, nicht-grafischen Lösung: Der Shell
Bei Debian und Ubuntu kann man standardmäßig auf die Bash zurückgreifen. Einen möglichen Ansatz zum mehrfachen Umbenennen von Dateien bietet eine Schleifenkonstruktion, die ich schon einmal in Zusammenhang mit dem massenhaften Umwandeln von Bild- und Videodateien in freie Formate vorgestellt habe.

#!/bin/bash
counter=123
for i in *.jpg; do
    mv -i "$i" "Sommer_Urlaub_$counter".jpg
    let counter+=1
done

Dieses kleine Skript muss nur noch abgespeichert und mit chmod+x ausführbar gemacht und in dem betreffenden Bilderverzeichnis ausgeführt werden. Dabei werden alle *.jpg Dateien der Reihe nach mit dem GNU Kommando mv in Sommer_Urlaub_123.jpg usw. umbenannt, wobei der Zähler bei 123 anfängt und dann am Ende der Schleife jeweils um 1 hochgezählt wird.

VIM - VI improved

Zuerst denkt man, wie kann ein Texteditor wie vim schon großartig beim Umbenennen von Dateien helfen? Ich muss zugeben, im Laufe der Zeit hat mich vim immer mehr begeistert und nachdem ich mir schon das Buch Vim 7 - Ge-Packt von Reinhard Wobst gekauft habe, stöbere ich auch ab und zu im Vim Wiki herum.
Gerade zum Thema "Mehrere Dateien umbenennen" gibt es schon einen englischen Eintrag namens Bulk rename files.
Um mehrere Dateien z.B. von Großschreibung zu Kleinschreibung zu transformieren, sendet man an vim einfach eine Liste mit allen in einem bestimmten Verzeichnis vorhandenen Dateinamen.

ls | vim -

Dadurch könnte es in Vim vielleicht so aussehen:

SOMMER_URLAUB_CIMG074.jpg
SOMMER_URLAUB_CIMG075.jpg
SOMMER_URLAUB_CIMG076.jpg
SOMMER_URLAUB_CIMG077.jpg
usw.

Um diese Dateinamen z.B alle in Kleinschreibung abzuändern, muss folgender Suche-und-Ersetze-Befehl in vims Kommandomodus eingegeben werden.

:%s/.*/mv -i "&" \L"&"/g

Ergebnis
mv -i "SOMMER_URLAUB_CIMG074.jpg" "sommer_urlaub_cimg074.jpg"
mv -i "SOMMER_URLAUB_CIMG075.jpg" "sommer_urlaub_cimg075.jpg"
mv -i "SOMMER_URLAUB_CIMG076.jpg" "sommer_urlaub_cimg076.jpg"
mv -i "SOMMER_URLAUB_CIMG077.jpg" "sommer_urlaub_cimg077.jpg"

Bisher wurden die Dateien vollkommen unberührt gelassen. Alles hat sich in Vim abgespielt. Mit der Taste "u" kann die Aktion rückgängig und mit STRG+R das Rückgängige rückgängig gemacht werden.
Wirklich ausgeführt wird die Umbenennung erst, wenn Zeile für Zeile an die Bash als Befehl übergeben wird.
Das lässt sich durch

:w !sh
oder
:%!bash

erreichen.
Auch in Vim lässt sich ein Zähler einbauen. Der allgemeine Ansatz scheint zu sein, eine separate Funktion zu schreiben, welche wiederum eine Zahl fortlaufend erhöht. Für meinen Geschmack habe ich dadurch in dem konkreten Beispiel gegenüber der for Schleife nichts gewonnen.
Warum ich Vim als Alternative angeführt habe, ist vielmehr der Vorteil, dass man alles in Ruhe vorher betrachten und prüfen kann, bevor man die Veränderung auf seine Dateien loslässt. Außerdem bietet Vim z.B. die praktische Möglichkeit mit dem visuellen Modus nur ein paar Dateien auszuwählen und den Befehl hierauf anzuwenden.
Dazu genügt es "v" zu drücken, mit den Cursortasten den Bereich zu selektieren, dann wieder in den Kommandomodus mit ":" wechseln und es erscheint automatisch schon

:'<,'>

Das ergänzt zu

:'<,'> !bash

und nur der ausgewählte Teil wird auch tatsächlich ausgeführt. Richtig interessant wird es aber erst mit Regulären Ausdrücken. Wer also z.B. nur den Buchstaben U, nach dem ersten Unterstrich groß oder klein schreiben möchte oder nur bestimmte Muster ersetzen möchte, kommt an den regular expressions nicht vorbei. Natürlich ist das ein Feature jeder guten Programmier- und Skriptsprache und nicht auf Vim beschränkt, welches in Sachen Reguläre Ausdrücke sowieso einen besonderen Weg gegangen ist.
Ich denke für einen so einfachen Fall bleibe ich weiterhin bei der Bash. Auch die Alternative rename sollte man sich anschauen. Wer aber bisher dachte, dass Texteditoren nur zum Ändern von Konfigurationsdateien taugen, kennt jetzt zumindest einen Tipp mehr aus dem umfangreichen Vim Wiki und es gibt dort noch viele, viele mehr. 🙂

Farbenfrohe Bash

Durch Zufall bin ich auf den Hilfeseiten des Debian Derivats aptosid gelandet und an dem Eintrag zu farbigen Terminals hängen geblieben.
Schon bei meinem Beitrag zu Grml 2010.12 hatte ich erwähnt, dass mir Grmls Gestaltung der Konsole gut gefallen hat. Ein wichtiger Punkt macht hierbei schon die Farbgebung aus.
Als Voreinstellung wird bei Debian und Ubuntu zwischen Nutzer und dem Superadmin Root in Terminals farblich nicht unterschieden. Der Hintergedanke: Die Ausgabe der Befehle sei wichtiger als ein farbiges Prompt, das nur ablenken würde.
Ich denke, es ist nicht verkehrt zumindest farblich kenntlich zu machen, ob man gerade mit einem normalen Nutzer oder mit Root Befehle in die Konsole eintippt. Während ein falscher Befehl als Standardnutzer oft nicht so dramatisch ist, haben root Befehle meistens weitreichende Konsequenzen. Aus großer Macht folgt eben auch große Verantwortung.
Um dem Nutzer am Prompt ein hellblaues Aussehen zu verpassen, muss die Datei .bashrc im Home Verzeichnis editiert werden. Zeile 39: force_color_prompt=yes wird auskommentiert und das Aussehen des Prompts in der Zeile

PS1='${debian_chroot:+($debian_chroot)}[33[01;36m]u@h[33[01;36m]:[33[01;36m]w[33[00m]$ '

angepasst. Die entscheidende Information für die Farbe steckt in den Abschnitten [01;36m]. Die Syntax für den Farbcode ist immer etwas wie 00;XX oder 01;XX.
Die Grundfarben sind:

[00;30] Schwarz
[00;31] Rot
[00;32] Grün
[00;33] Gelb
[00;34] Blau
[00;35] Magenta
[00;36] Hellblau
[00;37] Weiß

Danach muss für Root dementsprechend die Datei .bashrc im Verzeichnis /root geändert werden. Der wesentliche Code sieht bei beiden insgesamt so aus.

force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        color_prompt=yes
    else
        color_prompt=
    fi
fi
if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}[33[01;31m]u@h[33[01;31m]:[33[01;31m]w[33[00m]$ '
Farbenfrohe Bash
Farbenfrohe Bash

Schriftfarbe, Hintergrund und weiteres Aussehen hängt vom verwendeten Terminal ab. Für den Terminal-Emulator rxvt-unicode, der bei mir den Gnome-Terminal ersetzt, gibt es schon einige gute Vorlagen im englischen Wiki auf archlinux.org, die alle wichtigen Einstellungen in ~/.Xdefaults ersetzen.
Meine .Xdefaults stammt ebenfalls von dort und wurde nur leicht angepasst. Wer meine Vorlage gebrauchen kann, findet sie hier.

Bildschirmschoner für die Konsole

Ich erwähnte bei der Vorstellung meiner .screenrc, dass sich hinter der Befehlszeile blankerprg ein kleines Bashskript verbirgt, welches eine Reihe von Konsolenprogrammen ausführt, sobald man fünf Minuten bei screen inaktiv geblieben ist.
Die ursprüngliche Idee und die Skripte stammen von KMandla.
In meinem Home Verzeichnis befindet sich der versteckte Ordner .scripts und die ausführbare Datei screensaver.sh. Hierin werden folgende Programme zufällig ausgeführt.

#!/bin/bash
index=0
screensaver[$((index++))]="cmatrix -ab -u 2"
screensaver[$((index++))]="binclock -l -n"
screensaver[$((index++))]="htop"
screensaver[$((index++))]="$HOME/.scripts/hostname.sh"
sh -c "${screensaver[$((RANDOM % index))]}"

Cmatrix fällt sicher am meisten auf und wer jemals einen ähnlich klingenden Film gesehen hat, weiß auch sofort was sich dahinter verbirgt. 😉
Das zweite Programm, binclock, ist eine Binäruhr, deren Nullen in Grün und Einsen in Rot dargestellt werden. Die Option -l sorgt dafür, dass das Programm jede Sekunde ausgeführt wird und -n fügt noch eine weitere, menschlichere, Zeitangabe hinzu.
Nr. 3 ist htop, eine gegenüber top verbesserte Anzeige von Systemprozessen und mein bevorzugtes Programm für jeden Rechner, wenn ich eine Übersicht über alle laufenden Prozesse haben möchte.
Die vierte screensaver-Zeile führt wiederum ein weiteres Skript aus, welches den laufenden Kernel, den Namen des Rechners und das aktuelle Datum anzeigt. Dabei wird der Text mit Hilfe von figlet stark vergrößert, was ziemlich beeindruckend auf der Konsole wirkt. 😉
Hier noch die hostname.sh:

#!/bin/bash
while true
        do
                clear
                for i in {1..10}
                do
                        echo ""
                done
                echo `uname -r -s` | figlet -t -c -f big
                echo "on" $HOSTNAME | figlet -t -c -f small
                date +"%F %T %P" | figlet -t -c -f big
                sleep 15s
        done

Das war es auch schon, was sich hinter der ominösen Zeile blankerprg bei GNU screen verbirgt. Natürlich kann man je nach Geschmack das Ganze um Programme erweitern, reduzieren oder auch komplett ignorieren.
Bei der Arbeit auf der Konsole sorgt es auf jeden Fall für Abwechslung. 🙂

Komplette Bash Completion für Debian

Sowohl Debian als auch Ubuntu nutzen natürlich die automatische Vervollständigung von Befehlen und Verzeichnissen der Bash, sobald man die TAB-Taste drückt.
In der Standardkonfiguration bietet Ubuntu darüber hinaus aber auch Vervollständigung von Programmoptionen an. Um dieses Feature ebenfalls bei Debian zu aktivieren, muss man folgendes tun.

  • Bash Completion installieren
    aptitude install bash-completion
  • ~/.bashrc und /etc/bash.bashrc ändern
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
     . /etc/bash_completion
fi

Einfach nach einer ähnlichen Codezeile wie der oberen Ausschau halten und diese mit dem oben stehenden Code ersetzen. Um die automatische Vervollständigung systemweit nutzen zu können, kann der Code auch direkt in der globalen Bash Konfigurationsdatei /etc/bash.bashrc ausgetauscht werden.
Wenn man schon mal dabei ist, kann man auch die # vor dem Schlüsselwort alias entfernen, damit gibt es gleich noch eine weitere nützliche Funktion für die bash hinzu.
Mit alias lassen sich beliebige Bash-Kommandos auf wenige Zeichen abkürzen, was das Tippen auf der Konsole deutlich einfacher macht.
Zur Erinnerung reicht das glaube ich erst einmal. 😉

GNU Screen richtig nutzen

Screen ist für mich eines der wichtigsten Konsolenprogramme. Verbindet man sich mit ssh zu einem Rechner, vermisst man schnell die Fähigkeit einer modernen grafischen Oberfläche zwischen verschiedenen Anwendungen und Fenstern einfach hin- und her zu wechseln. Und wie können ausgeführte Programme in der Konsole auch nach dem Logout weiterlaufen? Hier kommt screen ins Spiel.
Beim Start von screen erscheint eine Nachricht und danach scheint es als ob sich nicht viel geändert hätte. Lediglich die Eingabeaufforderung der Shell blinkt einem entgegen.


Hier lässt sich nun z.B. rtorrent starten und der Bildschirm horizontal mit Strg+A und S teilen. Mit Strg+A und TAB springt man zur nächsten Bildschirmregion und kann dort mit Strg+A und c eine neue Shell öffnen und z.B elinks starten. Dies würde dann meinem schon vorgestellten rtorrent Setup entsprechen und sieht wie folgt aus.


Screen lässt sich aber nicht nur horizontal sondern auch vertikal teilen. Um das rtorrent Fenster vertikal zu teilen und htop anzuzeigen, springt man einfach mit Strg+A und TAB in die obere Hälfte zurück. Dann genügt bei Debian und Ubuntu ein Strg+A und | um den Bildschirm erneut zu teilen.
Anschließend wird der Schritt zum Starten einer neuen Anwendung wiederholt, wiederum Strg+A und TAB um zur nächsten Region zu gelangen, Strg+A und c um die Shell zu öffnen und dann htop eingeben.


Das Spiel lässt sich nun beliebig weiter treiben. Mit Strg+A und d bietet screen eine seiner besten Optionen an, nämlich screen abzutrennen und in den Hintergrund zu schicken. Danach befindet man sich wieder auf der ursprünglichen Konsole, alle in screen ausgeführten Programme laufen aber weiter!
Man könnte sich also problemlos ausloggen, zu Bekannten fahren, von dort sich erneut zu seinem Rechner mit ssh verbinden und danach mit dem Kommando screen -r seine Session wieder aufrufen.
Leider ist die Aufteilung der Anwendungen in verschiedene Regionen dann verschwunden und man müsste von neuem die Einteilung vornehmen. Natürlich lässt sich einfach mit Strg+A und SPACE zwischen den "Fenstern" wechseln. Oder man springt direkt zu einem Fenster indem man Strg+A und 0,1 oder 2 eingibt.
Wäre es nicht besser, man hätte eine Statusleiste, in der die unterschiedlichen Programme mit Namen und Fensterzahl schon angezeigt würden? Wäre es nicht praktischer die Anwendungen schon sofort beim Starten von screen mit auszuführen, ohne den Umweg über das Öffnen einer neuen shell zu gehen?
Der "Trick" ist die im Home Ordner versteckte Datei .screenrc zu erstellen, welche bei mir so aussieht.

hardstatus alwayslastline "%-w[%n %t]%+w%=%H %c Load: %l"
shelltitle '...'
startup_message off
vbell off
blankerprg /home/apo/.scripts/screensaver.sh
idle 300 blanker
#screen -t centerim 0 /home/apo/.scripts/centerim.sh
#screen -t alpine 1 alpine -d 0
#screen -t mc 2 /home/apo/.scripts/mc.sh
screen -t rtorrent 1 rtorrent
screen -t htop 2 htop
#screen -t wyrd 4 wyrd
screen -t elinks 3 /home/apo/.scripts/elinks.sh
#screen -t hnb 8 hnb
screen -t slurm 4 slurm -i eth0
GNU Screen

Aufmerksamen Lesern von KMandlas hervorragendem Linuxblog und Testern seiner Debian Lenny Sandbox Edition fällt hier sicher auf, dass es sich mit geringfügigen Änderungen um seine screenrc handelt. Sie ist übersichtlich und enthält meiner Meinung auch alles was man für die effiziente Benutzung von screen braucht.
Was macht diese Konfigurationsdatei? Zum einen verschwindet die Startnachricht, die man nicht wirklich benötigt. Die visuelle Rückmeldung, wenn sich etwas in den Fenstern getan hat, ist ebenfalls ausgeschaltet. Mit Shelltitle lässt sich der Name einer mit Strg+A und c gestarteten shell festlegen.
Die Zeile blankerprg verweist auf ein Bildschirmschoner-Skript, welches nach 5 Minuten ausgeführt wird, sollte man in der Zwischenzeit keine weiteren Aktionen in screen vorgenommen haben. Im Grunde genommen handelt es sich hier mehr um ein Gimmick, welches bei modernen Monitoren nicht notwendig ist. Ich stelle es ein anderes Mal ausführlicher vor.
Die restlichen Zeilen sind Programme, die ich regelmäßig in meiner Screen Session ausführe. Da ich nicht auf jedem Rechner immer die gleichen benötige, sind manche mit der # kommentiert. Der Aufbau ist simpel

screen -t Titel des Fensters Fensterzahl Name des Programms und Startparameter

Somit wird aus einem langweiligen Terminalfenster ein Fenstermanager für die Konsole. Zwischen den einzelnen Fenstern lässt sich danach wie gewohnt mit Strg+A und Space oder Strg+A und Fensterzahl wechseln.

Wer weitere Vorschläge für das Aussehen der Statuszeile bei screen sucht, findet schon bei Google mit dem Begriff hardstatus und screen viele weitere Ideen. Noch einfacher geht es, wenn man direkt byobu ausprobiert, was nichts anderes als ein verbessertes oder besser verschönertes screen ist.


Screen ist nicht nur für Serveradmins sinnvoll. Auch für alte Computer mit sehr wenig RAM bietet sich screen mit vielen nützlichen Konsolenprogrammen an, womit sich E-Mail schreiben, Browsen, Chatten, Bittorrent und vieles mehr realisieren lässt. Viel Spass beim Ausprobieren!

Mehr Sicherheit mit GnuPG

Ich habe gestern meinen drei Jahre alten öffentlichen PGP Schlüssel widerrufen und mir ein neues Schlüsselpaar erstellt. Um mir in Zukunft zu merken, welche Konsolenbefehle zum Erstellen des Schlüssels und später zum Ver- und Entschlüsseln notwendig sind, hierzu eine kurze Anleitung.
Es gibt mittlerweile viele gute und vor allem ausführliche Anleitungen zu GNU Privacy Guard, darunter z.B.
http://hp.kairaven.de/pgp/gpg/index.html

Ich persönlich benutze GnuPG hauptsächlich zum Signieren meiner Emails und zum Verschlüsseln von Dateien und Dokumenten, die ich mit Dropbox irgendwo in der Cloud ablege. Zum Widerrufen des öffentlichen Schlüssels habe ich Seahorse benutzt, welches man bei Ubuntu unter System->Einstellungen->Passwörter und Verschlüsselung findet.
Auch das Erstellen des Schlüssels und der Export auf einem Schlüsselserver ist damit bequem zu lösen, im Grunde ist Seahorse nur ein Frontend für GnuPG welches die wichtigsten Funktionen bereitstellt.
Doch mit ein paar Befehlen auf der Kommandozeile geht es natürlich auch zu lösen.

Schlüsselpaar erzeugen
gpg --gen-key

Das folgende interaktive Menü ist ziemlich selbsterklärend. Die Voreinstellungen zum Verschlüsselungsalgorithmus sind sinnvoll, weswegen man nur noch Name, Email und Verfallsdatum der Schlüssel angeben muss.

Öffentliche Schlüssel im Schlüsselring auflisten
gpg --list-keys

Den Schlüssel an einen Schlüsselserver schicken
gpg --send-keys Key-ID
gpg --keyserver hkp://keyserver:port --keyserver-options verbose --send-keys Key-ID

Widerrufzertifikat
gpg --gen-revoke Key-ID > Key-ID.revcert.asc

Einmal auf einen Schlüsselserver hochgeladen, lässt sich der öffentliche Schlüssel nicht mehr ohne den eigenen privaten Schlüssel und das Passwort widerrufen. Deshalb sollte man für alle Fälle sofort ein Widerrufzertifikat erstellen und sicher verwahren.

Nach öffentlichen Schlüsseln auf einem Schlüsselserver suchen
gpg --search-keys "Suchstring"

Eine weitere E-Mail Adresse zu einem Schlüssel hinzufügen
gpg --edit-key Key-ID

adduid eingeben, Name wiederholen und neue E-Mail Adresse hinzufügen und danach mit save abspeichern.

Verschlüsseln und signieren einer Datei mit GnuPG
gpg -ser Key-ID datei

Entschlüsseln
gpg -do datei_output datei_verschlüsselt

Verschlüsseln und Entschlüsseln zum Dateimanager Thunar hinzufügen

Ubuntu integriert das Ver- und Entschlüsseln schon im Dateimanager Nautilus. Wer wie ich z.B. Thunar nutzt kann dies im Menü Bearbeiten->Benutzerdefinierte Aktionen einstellen.
Zwei neue Namen für die Aktionen ausdenken und für Verschlüsseln diesen Befehl schreiben:

Verschlüsseln
urxvtcd -e sh -c "gpg -e -r Key-ID %f"

Entschlüsseln
urxvtcd -e sh -c "gpg -o %n.entschlüsselt -d %f"

Der Terminalemulator urxvt lässt sich natürlich durch jeden anderen ersetzen. %f steht für den Dateinamen und Key-ID muss wie in den vorangegangen Beispielen mit der gewünschten Schlüssel-ID ersetzt werden.
GnuPG ist ein sehr nützliches Werkzeug um seine Dateien sicher auf fremden Cloudservern abzulegen oder sichere Emails zu verschicken. Definitiv ein "Must-have" Programm auf jedem Linuxsystem.

Linux-Backup the Debian way

Nachdem ich in den letzten beiden Beiträgen meine Backupmethode und ein paar Distributionen zum Klonen der gesamten Festplatte vorgestellt habe, hier eine typische Debian Methode um ein Problem zu lösen.
Wer nicht unbedingt auf eine externe Lösung zurückgreifen möchte, um sein System zu klonen, kann mit Hilfe von Debians Paketverwalter dpkg seine Paketliste mit der aktuell installierten Software in eine Textdatei ausgeben und sichern lassen. Bei einer Systemwiederherstellung muss diese wiederum mit dem Paketverwalter eingelesen werden, wonach nur noch ein

aptitude update
aptitude safe-upgrade

genügt, um die ursprüngliche Software erneut zu installieren und das Ausgangssystem wiederherzustellen.

Auf dem Quellrechner
dpkg --get-selections > meine_auswahl

Auf dem Zielrechner
dpkg --clear-selections
dpkg --set-selections < meine_auswahl

Es empfiehlt sich auch den Ordner /etc und /home zu sichern, damit eventuell geänderte Einstellungen auf das neue System übertragen werden können.

Der Vorteil bei der Debian Methode

  • Keine externe Anwendung oder Distribution notwendig
  • Sehr einfach und schnell auf dem Quellrechner zu sichern.
  • Es müssen nur die wichtigsten Konfigurationsdateien gesichert werden.

Der Nachteil

  • Viele Pakete müssen ggf. neu installiert werden, was Zeit bei der Wiederherstellung kostet.

Mehr dazu findet sich auch auf der man Seite von dpkg.

charm: Mein charmanter Blogging Client

Zuerst die schlechte Nachricht. Charm lässt sich seit gestern nicht mehr über Debian Unstable installieren, wobei ich daran wohl nicht ganz unschuldig bin. 🙄 Dazu später mehr.
Vermutlich werden die Versionen aus testing und stable automatisch mit der Zeit aus den Repositorien entfernt. Das sollte trotzdem niemanden davon abhalten sich charm zu installieren, denn charm ist winzig klein, schnell und durch seine Implementierung in Python auch nicht zwangsläufig an ein Betriebssystem gebunden.
Alles was man braucht ist Python in der Version >=2.5 und charm. Es genügt die tar.gz Datei in einen Ordner der Wahl zu entpacken und charm mit
python charm
zu starten.

Warum gerade charm zum Bloggen nutzen?

Ja, es gibt noch weitere Blogging Clients für Linux da draußen. Was charm besonders macht, ist seine Fähigkeit alle Funktionen als Kommandozeilenprogramm auszuführen. Keine grafische Oberfläche ist notwendig.
Charm lässt sich entweder durch ein interaktives Menü textbasiert steuern oder auch direkt durch die Übergabe von Parametern zum automatischen Erstellen von Blogeinträgen einsetzen.
Selbst auf dem ältesten Rechner mit einer Python-Installation lassen sich so Informationen an sein Lieblingsblog übertragen.
Charm wurde ursprünglich als Client für das Livejournal Blog entworfen, unterstützt mittlerweile aber auch ATOM oder Metaweb (WordPress!) APIs.
Wer WordPress kennt hat über die Jahre sicherlich auch festgestellt, dass diese hervorragende Open Source Sofware mit jeder Veröffentlichung umfangreicher, vielseitiger und intelligenter wurde.
Leider kann es selbst auf leistungsfähigen Rechnern mit schnellen Browsern vorkommen, dass WordPress sich beim Darstellen der Webseiten viel Zeit lässt, was vor allem an einem mittlerweile überschäumenden Einsatz von JavaScript und der großen Komplexität der Software liegen mag.
Was für einen Dual Core Rechner schon ärgerlich sein kann, wirkt sich auf einem 10 Jahre alten Laptop nicht positiver aus.
Der größte Vorteil von charm: Man kann seinen Editor zum Bloggen selbst wählen. Zum Beispiel benutze ich gerade Leafpad, könnte aber genauso gut auch vim, emacs, nano oder gedit zum Editieren auswählen.
Zum Ausbessern von Fehlern eignet sich niemand besser als charm. Kein Warten auf das Starten des Browsers, das Einloggen in sein WordPress-Blog, das Suchen nach dem Artikel und erneutes Warten bis sich der WordPress-Editor aufgebaut hat.

Wie lässt sich charm bedienen?

Als erstes muss die versteckte Datei .charmrc im Homeverzeichnis angelegt werden. Dort genügt es folgendes einzutragen.

metaweb = Nutzer Passwort http://www.meinlinuxblog.de/blog/xmlrpc.php
editor = leafpad

Für Nutzer und Passwort müssen selbstverständlich die eigenen Informationen stehen und die Adresse des WordPress-Blogs bzw. zur Datei xmlrpc.php.
Nachdem Start von charm auf der Konsole erscheint ein textbasiertes Menü in Englisch, welches einem die Möglichkeit bietet neue Einträge zu posten [p], bestehende zu editieren [e] oder charm wieder zu verlassen [q].
Mit der Option [p] erscheint ein weiteres Untermenü, wo man mit [e] und dem voreingestellten Editor sofort losschreiben kann.
Die Optionen [s], [c], [k] ändern den Titel des Artikels, die Kategorien und die Schlagwörter.
Im Regelfall genügt danach nur noch das Abspeichern des Textes im Editor und die Option [u], womit der Blogeintrag abgeschickt wird.
Das Editieren ist genauso leicht. Nach der Auswahl im Hauptmenü muss noch die Anzahl der Einträge angegeben werden, die von charm abgerufen werden sollen. Danach kann man durch Eingabe der Zahl vor dem Post den Artikel zum Editieren auswählen.

Charm bietet noch weitere Möglichkeiten wie Rechtschreibüberprüfung oder das Bearbeiten des Textes mit Filtern, um wiederkehrende Prozesse beim Bloggen zu vereinfachen. Speziell für das Livejournal Blog gibt es noch mehr Funktionen.
Mir persönlich genügten schon die soeben vorgestellten. Doch auch ein paar Schwächen von charm will ich nicht verschweigen, womit wir zu meinem Eingangs erwähnten Eingeständnis kommen, dass ich nicht ganz unschuldig bin, dass charm (zumindest vorläufig) aus Debian entfernt wurde.

Charm Bugs

Charm wurde ursprünglich für Livejournal und für englischsprachige Bediener entwickelt. Da das Menü nicht sehr kompliziert ist, lässt sich letzteres leicht verschmerzen.
Problematisch wird es beim Bloggen mit Sonderzeichen wie z.B. deutschen Umlauten. Hier scheint charm das Encoding der Texte nicht immer richtig zu erkennen. Da sowohl WordPress standardmäßig mit UTF-8 arbeitet und auch Linux diesen Standard seit Jahren favorisiert, hätte ich gehofft, dass es hier weniger Probleme gibt.
Scheinbar gibt es den Bug schon seit Jahren in verschiedenen Formen, was zumindest auf der Livejournal Seite von Lydia Leong, der Entwicklerin von charm, nachzulesen ist.
Des weiteren sollte man vermeiden eine wiederhergestelle Session ohne Abspeichern zu verlassen. Charm löscht daraufhin die Originalvorlage, was ziemlich ärgerlich ist, wenn man dieses "Feature" nicht kennt.
Ich habe daraufhin meine Erfahrungen mit dem Programm reportbug an Debian gemeldet und konnte zumindest für das Encoding-Problem schon eine Lösung finden. Bug #613036
Für das Löschen und ein verwandtes Problem erstellte ich Bug #616427 und Bug #616430
Soweit so gut, dachte ich, der Paketverwalter hatte sich auch dem ersten Problem schon angenommen und den Bug an "Upstream" weitergeleitet. Doch gestern musste ich leider erfahren, dass der Paketverwalter keinen der Entwickler erreichen konnte und selbst das Programm nicht ändern kann.
In so einem Fall kann man beantragen, dass das Paket aus den Debian-Repositorien gelöscht wird, was auch getan wurde. Hätte ich nur geschwiegen. 🙁
Wirklich schade. Ich bin mir nicht sicher, ob versucht wurde Lydia Leong direkt per Email zu erreichen, denn die offizielle Seite von charm bei Sourceforge scheint tatsächlich äußerst selten gelesen zu werden.
Tja, das ist eben auch Open Source. Sobald ich mehr über die anderen Probleme herausfinde, kann ich sie vielleicht selbst lösen und erreichen, dass charm erneut in Debian aufgenommen wird. Bis dahin empfehle ich trotzdem den Download der Originalversion aber mit dem Hinweis die Bugreports noch einmal zu lesen.
Auch mit diesen Schwächen bleibt charm für mich die Nr.1 zum Bloggen.

Canto ein Feedreader für die Konsole

Wer einen modernen, grafischen Browser benutzt, muss selten nach externen Programmen zum Lesen von RSS- oder ATOM-Feeds Ausschau halten.
Firefox bietet die Unterstützung von Haus aus an und in letzter Zeit gefällt mir das sogenannte Feed-Applet des AWN-Docks ebenfalls sehr gut.
Richtig interessant wird es erst, wenn man auch auf älteren Rechnern schnellen Zugriff auf Nachrichten haben möchte. Firefox Startzeit ist dort meistens nicht berauschend und Spielereien wie das AWN-Dock machen den Rechner auch nicht schneller.
Für solche Fälle nutze ich seit längerem den Feedreader Canto.
Canto ist in Python geschrieben und benutzt zur Darstellung der Nachrichten die Ncurses-Bibliothek. Als Konsolenprogramm läuft er natürlich auch ohne X. Er ist schnell, bunt und übersichtlich.


Nach dem Start wird eine Liste mit allen Nachrichten angezeigt. Mit der Taste "c" lassen sich die einzelnen Feeds auf- und zuklappen. Mit "Space" gibt es eine Voransicht zu einzelnen Einträgen. Links werden in Canto farbig dargestellt, wobei diese bei mir mit grün eine HTML-Seite und mit blau ein Bild signalisieren.
Die Taste "g" steht für goto und durch Eingabe der Zahlenangabe neben den Links wird der voreingestellte Browser oder der Bildbetrachter geöffnet und der Link dort angezeigt.
Cantos Konfigurationsdatei befindet sich in ~/.canto/conf.py und sieht bei mir so aus.

from canto.extra import *
import os
# Handlers when in Linux console or xterm
if os.getenv("TERM") == "linux":
    link_handler("elinks "%u"", text=True)
    image_handler("feh "%u"", text=True, fetch=True)
else:
    link_handler("midori "%u"")
    image_handler("feh "%u"", fetch=True)
    link_handler("mplayer "%u"", ext="mp3")
    link_handler("mplayer "%u"", ext="mp4")
#add("http://rss.slashdot.org/slashdot/Slashdot")
#add("http://reddit.com/.rss")
#add("http://kerneltrap.org/node/feed")
add("http://www.tagesschau.de/xml/rss2")
add("http://www.heise.de/newsticker/heise.rdf")
add("http://codezen.org/canto/feeds/latest")

Die If-Bedingung prüft, ob man sich auf der Konsole oder in einer X-Umgebung befindet. Je nach Ergebnis wird dann entweder Elinks oder Midori ausgeführt, wann immer eine HTML-Seite geöffnet werden soll.
Feh ist als Bildbetrachter voreingestellt und Mplayer soll ausgeführt werden, wenn die Dateiendung des Links auf .mp3 oder .mp4 lautet.
Schließlich werden mit der add Anweisung noch die Feeds eingetragen und mit dem Befehl
canto -u
Canto gestartet und die Feeds aktualisiert.
Als Alternative bietet sich auch Newsbeuter an.

abcde – ein Kurztipp zum Archivieren von Audio-CDs

Es gibt viele Wege seine Audio-CDs mit Linux auf die PC-Festplatte zu archivieren und in ein passendes Format zu konvertieren oder alles auf einen portablen MP3-Player zu überspielen. Ich selbst war vor Jahren schon zufrieden mit Soundjuicer oder den Funktionen, die man in Rhythmbox findet.
Seit fast zwei Jahren bin ich nun auf der Suche nach alternativen Programmen für die Konsole und nutze nun am liebsten abcde, A Better CD Encoder, für diese Art von Aufgaben.
Abcde ist ein starkes Kommandozeilenprogramm, welches ganz in UNIX-Manier die Fähigkeiten anderer Programme nutzt, um den kompletten Vorgang des Archivierens in einem simplen Kommando zu vereinen.
Dabei kommen unter anderem cdparanoia zum Auslesen der Audio-CDs, wget und cd-discid zum Abgleichen mit CDDB und verschiedene Encoder wie flac, lame oder vorbis zum Einsatz.
Bei Audioqualität bin ich kompromisslos und nutze das Flac-Format, welches sich auch auf MP3-Playern genießen lässt, sofern man Rockbox aufgespielt hat. 😉
Wenn man möchte, kann man später immer noch die Flac-Dateien umwandeln oder abcde gleich anweisen die Audiospur in mehrere verschiedene Formate umzuwandeln.
Das Beste an all dem ist aber, es hat keine umfangreichen Abhängigkeiten mit irgendwelchen Grafikbibliotheken und es ist sehr, sehr elegant zu bedienen.

Installieren mit
aptitude install abcde

Eine Audio CD in flac umwandeln
abcde -o flac

Eine Audio CD in flac, mp3 und ogg umwandeln
abcde -o flac,mp3,vorbis

Einfacher geht es nicht, weswegen abcde ein Paradebeispiel ist, wieso Konsolenprogramme auch auf Hochleistungsrechnern und nicht nur Uralt-Laptops Sinn machen. 🙂