Dateien und Ordner auf der Kommandozeile verwalten

Dateien komprimieren

Zwar hat Dateikomprimierung heute nicht mehr denselben Stellenwert wie zu den Zeiten von 100-MByte-Festplatten, doch spielt sie für Backups oder den Versand von Dateien per E-Mail immer noch eine Rolle [2]. Die Bash-Shell von Linux bringt nicht weniger als vier Kommandos für die Datenkompression mit: tar, gzip, bzip2 und das nur selten eingesetzte cpio.

Gzip hat sich als Quasi-Standard für die Komprimierung etabliert, da es das Programm für alle gängigen Betriebssysteme gibt und sich die komprimierten Daten gut austauschen lassen. Im einfachsten Fall komprimieren Sie eine Datei mit dem simplen Aufruf gzip Datei und können dann das Ergebnis mithilfe des Kommandos gzip -l Datei.gz begutachten, das unter anderem den Komprimierungsgrad ausgibt.

Die komprimierte Datei verschwindet im Archiv und liegt anschließend nicht mehr auf der Platte. Um das zu vermeiden, lassen Sie Gzip mittels der Option -c das Archiv auf die Standardausgabe schreiben und leiten es von dort aus in eine Datei um:

$ gzip -c Datei > Datei.gz

Den Komprimierungsgrad und damit auch die Arbeitsgeschwindigkeit von Gzip beeinflussen Sie bei Bedarf beim Aufruf mit den Schaltern --best (höchste Komprimierung) oder --fast (schnellste Verarbeitung). Das Ganze lässt sich über die Optionen -1 (entspricht --fast) bis -9 (entspricht --best) auch feintunen, wobei Gzip voreingestellt -6 verwendet. Für die Arbeit mit Gzip-Archiven gibt es eine ganze Reihe Hilfswerkzeuge:

  • zcat zeigt die Dateien aus einem Gzip-Archiv an.
  • zcmp vergleicht die Dateien aus einem Gzip-Archiv byteweise mit angegebenen Files.
  • zdiff zeigt die Unterschiede zwischen Dateien aus einem Gzip-Archiv und den angegebenen Files an.
  • zgrep, zegrep und zfgrep suchen in Dateien eines Gzip-Archivs nach dem angegebenen Textmuster.

Mit dem Schalter -r taucht Gzip beim Komprimieren in eventuell vorhandene Unterverzeichnisse ab und verpackt auch deren Inhalt. Um ein Gzip-Archiv wieder auszupacken, verwenden Sie Gzip mit dem Schalter -d ("deflate") oder benutzen – noch einfacher – schlicht das Kommando gunzip Datei.gz.

Das Kommando bzip2 erstellt Archive, die um 10 bis 20 Prozent kompakter ausfallen als die mit Gzip erstellten. Die Optionen dieses Befehls gleichen weitgehend den von Gzip benutzten. Allerdings fehlt -r für das Abtauchen in Unterverzeichnisse, dafür erhält -k die Originale der komprimierten Dateien. Auch hier gibt es wieder einige unterstützende Werkzeuge:

  • bzipcat zeigt den Inhalt einer im Bzip2-Archiv enthaltenen Datei an.
  • bziprecover hilft beim Reparieren beschädigter Bzip2-Archivdateien.
  • bunzip2 dekomprimiert Bzip2-Archive.

Möchten Sie sich nicht unnötig mit den Optionen von Gzip oder Bzip2 herumschlagen und auf komfortable Weise ganze Verzeichnisbäume in Archive verpacken, dann greifen Sie einfach zu tar. Sein Name steht für seinen ursprünglichen Einsatzzweck, das Erstellen von "tape archives", als Dateien für das Backup auf Band.

Für das Verpacken benötigen Sie die Option -c ("create"). Hinter <-f> geben Sie den Namen des zu erstellenden Archivs an, mit -z (Gzip) beziehungsweise -j die gewünschte Kompressionsmethode. Als nützlich erweist sich zudem -v, das dafür sorgt, dass Tar die Namen der bearbeiteten Dateien ausgibt. Der folgende Befehl verpackt das Verzeichnis RasPiGeek samt aller Unterverzeichnisse in ein TAR.GZ-Archiv, einen sogenannten Tarball:

$ tar czvf RasPiGeek.tar.gz RasPiGeek/

Dabei bleiben alle Originaldateien erhalten. Genauso einfach funktioniert auch das Auspacken mittels der Option -x ("extract"), wobei Tar die im Archiv verwendete Kompressionsmethode selbst erkennt – Sie müssen -z beziehungsweise -j also nicht extra angeben:

$ tar xvf RasPiGeek.tar.gz

Auch wenn es sich meist unkompliziert verwenden lässt, kennt Tar doch eine Vielzahl von Optionen – zu viele, um sie hier alle zu nennen. So können Sie beispielsweise mit --exclude Datei Dateien ausschließen und mit -p Dateirechte konservieren. Beim Auspacken verhindert -k das Überschreiben bereits vorhandener Dateien. Um zwei Tar-Archive aneinanderzuhängen, tippen Sie:

$ tar --append Tarball1 Tarball2

Die Option -u frischt den Inhalt eines Archivs mit neueren Versionen der enthaltenen Dateien auf, mittels --diff vergleichen Sie zwei Tarballs.

Das vierte Kompressionskommando, cpio, ist über die Jahre etwas aus der Mode gekommen, nicht zuletzt deshalb, weil es in der Handhabung etwas Umstände macht. Um ein Archiv zu erzeugen, beschickt man es in der Regel via ls mit einem Eingabedatenstrom, den man es dann in eine Ausgabedatei schreiben lässt:

$ ls | cpio Optionen -o > Archiv.cpio

Hartgesottene Unix-Administratoren lieben Cpio, weil es ähnliche Fähigkeiten wie Tar bietet, aber noch mehr Optionen und Kompressionsformate kennt sowie vielfältige Möglichkeiten bietet, die in Archiven gelagerten Dateien einzusehen und sogar zu bearbeiten. Als normaler Anwender werden Sie aber kaum jemals in die Verlegenheit geraten, Hand an Cpio-Archive zu legen.

Globbing

Einer der Gründe für die Mächtigkeit von Shell-Befehlen liegt darin, dass sie sich auf mehrere Dateien gleichzeitig anwenden lassen. Bei vielen Kommandos können Sie eine durch Leerzeichen getrennte Liste von Dateien übergeben. Viel präziser und effizienter gelingt der Umgang mit mehreren Dateien allerdings über das sogenannte Globbing. Der vom englischen Wort für Klecks oder Klümpchen abgeleitete Begriff bezeichnet eine musterbasierte Suche ("pattern matching") auf der Basis von Platzhalterzeichen – den sogenannten Wildcards – oder Suchmustern, die man "reguläre Ausdrücke" nennt.

Das in der Bash-Shell am häufigsten verwendete Wildcard-Zeichen ist der Asterisk (*), der für eine beliebige Anzahl beliebiger Zeichen steht. Er kommt meist zum Einsatz, um Dateien mit derselben Dateinamenserweiterung zu finden. So gibt der Befehl ls *.png alle PNG-Grafiken im aktuellen Verzeichnis aus. Das Fragezeichen dagegen steht als Platzhalter für genau ein beliebiges Zeichen. Tippen Sie beispielsweise ls bild?.png, erhalten Sie als Treffer Dateien wie bild1.png oder bild2.png, nicht aber bild10.png – Letzteres enthält ja nach bild noch zwei weitere Zeichen, nicht nur eins.

Mit Suchmustern lässt sich das Globbing wesentlich präziser gestalten. Um eine Gruppe bestimmter Zeichen anzugeben, setzen Sie diese in eckige Klammern. So trifft der Ausdruck bild[12].png auf die Dateien bild1.png und bild2.png zu, nicht aber auf bild3.png oder bild12.png. Durch ein vorangestelltes ^ negieren Sie den Ausdruck und erhalten als Treffer alle Dateien, auf die das Suchmuster nicht zutrifft (Abbildung 6).

Abbildung 6: Mithilfe von Suchmustern wenden Sie Kommandozeilenbefehle auf mehrere Dateien an.

Solche Suchmuster decken allerdings nur einen kleinen Ausschnitt der Möglichkeiten ab, die klassische reguläre Ausdrücke, sogenannte Regexe, bieten. Hier können Sie ganze Zeichenklassen und Zeichenbereiche verwenden, die Suche auf Zeilen- oder Wortanfänge beschränken, und vieles andere mehr [3]. Dabei handelt es sich zwar um eine Kunst, die etwas Übung erfordert, doch der Aufwand lohnt sich.

Generell sollten Sie aber bei der Benutzung von Globbing stets Vorsicht walten lassen. Bevor Sie Kommandos wie mv oder gar rm per Mustersuche auf zahlreiche Dateien loslassen, sollten Sie zur Sicherheit vorab anhand eines ungefährlichen Befehls wie ls überprüfen, welche Dateien das Suchmuster erfasst. Anderenfalls könnte eine unangenehme Überraschung ins Haus stehen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

12/2019
RasPi-Alternativen

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Grußbotschaften

    Mit Sonic Pi zaubern Sie komplexe Sounds, die Sie bei Bedarf sogar noch während des Abspielens modifizieren.

  • Das Runde und das Eckige

    Mit dem MCP4725 ergänzen Sie einen RasPi um einem D/A-Wandler, der bei Bedarf noch weitere Funktionen erfüllt.

  • Alles unter Kontrolle

    Schon ein einfaches Mikrocontrollerboard wie das CY8CKIT-049-42xx bietet erstaunlich viele Möglichkeiten beim Ansteuern von Hardware.

  • Viele Kerne

    Das Spresense Development Board von Sony lässt sich mit der Arduino IDE programmieren und bringt auch ein eigenes Entwickler-SDK mit.

  • Exotische Früchte

    Der aus China stammende Orange Pi positioniert sich mit einem guten Preis und interessanten Features gegen die RasPi-Truppe. Kann er sich auch behaupten?

  • Flexibler Surfer

    Mit dem neuen RasPi 4 setzen Sie einen öffentlichen Webkiosk schnell und kostengünstig auf.

  • Auskunftsfreudig

    Viele Devices, so auch der E.ON-Aura-Controller, verwenden eine Schnittstelle namens REST, um Zustandsdaten zu übermitteln. Mit ein wenig Bastelei lesen Sie diese auch über Ihr Smartphone aus.

  • Doppelt gemessen

    Mit wenig Aufwand und einem Pi Zero realisieren Sie einen mobilen Zweikanal-Spannungsprüfer.

  • Elegant zusammengeführt

    Tizonia streamt Musik von Online-Quellen und lokalen Sammlungen. Die schlanke Architektur macht den Player zur guten Wahl für den Einsatz auf dem RasPi.

  • Kommunikativ

    Nicht jeder traut sich zu, sein eigenes Smartphone zu bauen. Allerdings kann jeder Linux-Nutzer den Raspberry Pi im Handumdrehen zu einem VoIP-Telefon aufrüsten.