Aus der Linux-Trickkiste: Schlauer drucken von der Kommandozeile


Heute habe ich mal wieder eine fast triviale Kleinigkeit aus meiner bash-Werkzeugkiste. Erfahrene Linux-Nutzende werden da wahrscheinlich abwinken (steht ja auch alles in manpages), aber für weniger Erfahrene auf der bash ist das vielleicht wissenswert 🙂

Der Anwendungsfall: Ich brauche zum Beispiel von einem bestimmten Zeitraum – sagen wir, dem letzten Halbjahr – Ausdrucke von Rechnungen, die ich per Mail bekomme. Nun könnte ich sechs Dateien im Dokumentenbetrachter öffnen, jede einzelne über den Menübefehl „Drucken“ ausdrucken, dabei jeweils daran denken, nur die dritte Seite anzugeben… oder ich kann das mit einem Einzeiler auf der bash erledigen. Vorausgesetzt, die Dateien folgen einem einheitlichen Dateinamen-Schema.

Der Befehl zum Drucken lautet lpr. Auf manchen Maschinen musste ich noch den Drucker mittels der Option -P spezifizieren, aber auf meinem aktuellen Ubuntu wird automatisch der Standarddrucker angesteuert. (lpstat -a gibt übrigens die ansprechbaren Drucker aus.) Aber was, wenn ich zum Beispiel nur die dritte Seite jedes Dokuments brauche?
Die Lösung liegt in der Option page-ranges. Im konkreten Fall müsste der Befehl lauten:

lpr -o page-ranges=3 datei.pdf

Damit wird allerdings nur eine einzelne Datei gedruckt. Habe ich ein konsistentes Dateinamen-Schema und brauche Drucke von Dateien aus aufeinanderfolgenden Monaten, kann ich diese über Wildcards ansprechen. In meinem Fall geht das über den spezifischen Platzhalter für Dezimal-Ziffern: In eckigen Klammern kann ich nämlich alle Zeichen aufführen, die im Dateinamen vorkommen können (zum Beispiel [jJpPgG]) – auch als Zeichenbereiche. Wollte ich zum Beispiel nur Dateinamen, in denen an einer bestimmten Stelle Ziffern von 7 bis 0 vorkommen, ginge das mit [7-9]. Die Angabe [a-f] würde alle Dateien umfassen, die an der betreffenden Stelle die Kleinbuchstaben a bis f enthalten. Gehen wir davon aus, dass ich für jeden Monat eine Datei habe, die im Format „YYYY-MM_datei.pdf“ benannt ist. Die Eingabe

lpr -o page-ranges=3 2016-0[1-6]_datei.pdf

veranlasst den Druck der dritten Seite jeder Datei aus dem ersten Halbjahr 2016.