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

04/2019
TV & Multimedia

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Finger weg

    Ein Temperatursensor verrät, ob Sie einen Gegenstand gefahrlos berühren dürfen. Beim Messen brauchen Sie dabei noch nicht einmal Kontakt zum Objekt.

  • Aus einer Hand

    Um einen Mikrocontroller zu programmieren, genügt ein Raspberry Pi. Wir zeigen, was Sie dazu noch benötigen.

  • Im Gleichtakt

    Synchronisierte Live-Loops und selbst erstellte Funktionen helfen dabei, Sonic Pi wie ein Live-Instrument zu spielen.

  • Mach mal

    Das Ftduino-Modul schlägt die Brücke zu Fischertechnik und ermöglicht es unter anderem, einen Drei-Achsen-Roboter anzusteuern.

  • Eleganter Diener

    Jeden Morgen dieselben Handgriffe, um zu sehen, ob die S-Bahn fährt und wie das Wetter wird? Ein cleverer Infoscreen auf RasPi-Basis automatisiert den Vorgang.

  • Bienenflüsterer

    Bienenzüchter, die ihre Völker besser kennenlernen möchten, müssen die fleißigen Insekten nicht pausenlos stören. Mit einem Raspberry Pi und verschiedenen Sensoren überwachen sie Temperatur, Luftfeuchtigkeit und bald auch das Gewicht des Bienenstocks.

  • Beerige Musik

    Für echten Hi-Fi-Sound braucht es mehr als einen kleinen Bluetooth-Brüllwürfel. Mit Volumio und einem Raspberry Pi rüsten Sie Ihre klassische Hi-Fi-Anlage mit smarten Funktionen auf.

  • Ton ab!

    Auf den ersten Blick erscheint der RasPi zu schwachbrüstig für den Betrieb leistungshungriger DAW-Software. Doch der Schein trügt.

  • Himbeer-TV

    Der DVB TV µHAT rüstet den Raspberry Pi mit einem DVB-T/T2-Tuner auf. Die deutsche TV-Landschaft schränkt dessen Möglichkeiten allerdings ein.

  • Git à la RasPi

    Mit wenigen Handgriffen zum Git-Hoster: Die dezentrale Arbeitsweise von Git erleichtert in Kombination mit der Netzwerkfähigkeit des RasPi das Verwalten von Quellcode.