Home / Archiv / Tipp der Woche / Dateien schneller packen und konvertieren mit GNU parallel

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Debian 7.1 ist erschienen
(179 Punkte bei 5 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.

GNU parallel in Aktion
GNU parallel in Aktion

Dateien schneller packen und konvertieren mit GNU parallel

→ Zum Tipp-Archiv...

Wer viele Dateien in einem Verzeichnis komprimieren oder konvertieren möchte, kann das auf der Shell mit einer Schleife machen:

for i in *; do gzip $i; done 

Dieses Beispiel komprimiert nacheinander alle Dateien mit gzip. Um die Auflösung (also die Abmessungen) aller Bilder mit der Endung .png um 50 Prozent zu verkleinern, kann man zum Werkzeug mogrify aus dem ImageMagick-Paket greifen (unter Ubuntu 12.10 im Paket imagemagick):

for i in *.png; do mogrify -resize 50% $i; done 

Beide Lösungen haben jedoch die unangenehme Eigenschaft, dass sie jede Datei nacheinander behandeln. Oder mit anderen Worten: Je mehr Dateien im Verzeichnis liegen, desto länger dauert der gesamte Vorgang.

Die Kompression oder Umwandlung könnte man beschleunigen, indem man mehrere Dateien gleichzeitig einpacken beziehungsweise bearbeiten lässt. Damit würde dann auf modernen Prozessoren auch nicht nur ein Rechnenkern beschäftigt, während die anderen Däumchen drehen.

Je mehr Dateien zu verarbeiten sind, desto deutlicher sind die Unterschiede zwischen einer Schleife und der parallelen Verarbeitung.

Genau hier springt das kleine Programm parallel ein, das alle großen Distributionen in ihren Repositories anbieten. Unter Ubuntu 12.10 steckt es beispielsweise im Paket parallel. Das Werkzeug startet einfach einen Befehl mehrfach. Alle Informationen, mit denen man parallel über die Standardeingabe füttert, reicht es an die von ihm gestarteten Befehle weiter. Klingt kompliziert, ist in der Praxis aber ganz einfach. Um alle Dateien im aktuellen Verzeichnis parallel verpacken zu lassen, ruft man einfach folgenden Befehl auf:

ls | parallel gzip

Die gepackten Dateien muss man nicht alle wieder einzeln auspacken. Stattdessen hilft auch hier wieder parallel:

ls | parallel gunzip

In beiden Fällen startet parallel gleich mehrfach gzip beziehungsweise gunzip und setzt die Bande dann auf die von ls herübergereichten Dateinamen an.

Nach dem gleichen Prinzip skaliert der folgende Befehl die Auflösung aller Bilder mit der Endung .png um die Hälfte herunter:

ls *.png | parallel mogrify -resize 50%

Die wesentlichen limitierenden Faktoren sind hier nur noch die Geschwindigkeit der Festplatte und die Anzahl der Prossorkerne.

Bookmark and Share

Kommentare
do not parse ls
norbert (unangemeldet), Donnerstag, 29. November 2012 15:50:49
Ein/Ausklappen

Siehe Überschrift. Den Output von ls zu parsen ist die schlechteste idee ever. Und wenn es nur ein Beispiel war, dann ein schlechtes. So lehrt man User, Bugs zu bauen.
näheres dazu: http://mywiki.wooledge.org/ParsingLs


Bewertung: 151 Punkte bei 24 Stimmen.
Den Beitrag bewerten: Gut / Schlecht
-
Re: do not parse ls
Kai (unangemeldet), Donnerstag, 29. November 2012 22:48:51
Ein/Ausklappen

Nein, nicht pauschal. Es kommt darauf an, was nach dem Pipe mit den Dateinamen passiert.

"ls" wird übrigens auch in der offiziellen parallel-Dokumentation als Beispiel genannt.

Auf Nummer sicher gehen kann man mit den doppelt geschweiften klammern:

ls | parallel befehl {}




Bewertung: 248 Punkte bei 16 Stimmen.
Den Beitrag bewerten: Gut / Schlecht
Achtung - systemlast
Ulf B., Dienstag, 20. November 2012 19:51:21
Ein/Ausklappen

Hallo,

nettes Progrämmchen, man sollte es allerdings mit bedacht einsetzten.

Zum einen bringt es nur etwas bei Hyberthreding und Mehrkern-CPUs und zum anderen kann man damit einen PC (je nach Kernel) quasi lahmlegen. und zwar wenn man mindestens so viele Tasks wie CPU Kerne (auch Hyberthredding) hat. Dieses tritt dann auf, wenn man den Prozess startet und zeitweise wenig z.B. auf dem Desktop tut. Denn nach einiger Zeit ordnet Linux den Prozessen mit hoher Last höhere Resourcen (RAM und CPU zeit zu). Dann sollte man die Priorität der Tasks herunter stufen - damit das nicht so gravierend auftritt.

Gruß
Ulf


Bewertung: 137 Punkte bei 24 Stimmen.
Den Beitrag bewerten: Gut / Schlecht
-
Re: Achtung - systemlast
mandri (unangemeldet), Donnerstag, 22. November 2012 21:07:07
Ein/Ausklappen

Haben die Macher auch bemerkt:
http://www.linux-community....hrichten/GNU-Parallel-20121122


Bewertung: 195 Punkte bei 16 Stimmen.
Den Beitrag bewerten: Gut / Schlecht

Tipp der Woche

whowatch
Nutzer und Prozesse mit whowatch überwachen
Tim Schürmann, 18.06.2013 12:49, 0 Kommentare

Wenn Administratoren herausfinden wollen oder müssen, was die Benutzer auf einem System gerade so treiben, dann hilft ihnen whowatch. Das kleine Kommandozeilenprogramm zeigt in Ec...

1784 Hits
Wertung: 103 Punkte (20 Stimmen)

Aktuelle Fragen

SUSE 12.3 64Bit: Miro funzt nicht
Wimpy *, 14.06.2013 13:05, 5 Antworten
Seit Installation von openSUSE 12.3 64Bit startet Miro nicht. (Version 5.0.4-1.24-x86_64 von Pa...
Kontakt via QR code hinzufügen
Herman Sproesser, 17.05.2013 17:46, 4 Antworten
Hi hab in der aktuellen ausgabe 06.2013 den artikel über QR Codes gelesen. Ich hab nartürlich...
Dateimanager Dolphin, wo legt er die Datei Kommentare ab?
Uwe Heine, 16.05.2013 15:19, 1 Antworten
Suse Linux 12.1 - KDE 4.7.2 / Dolphin 1.7. Ich habe bei vielen Dateien über Dolphin Kommentare...
wie baut man Kernel Module so, dass sie mit jedem Kernel laden?
GoaSkin , 22.04.2013 10:22, 1 Antworten
Hallo, baut man anhand eines Kernel-Sources Module, nutzt Linux im Normalfall eine strikte V...
Problem beim Installieren von SuSe 12.3
Georg Prokert, 14.04.2013 00:04, 16 Antworten
Hallo, auf meinem neuem Laptop (Acer Aspire V3-771, Intel Core i5-3230 M, Intel HD Graphics 4...

Jetzt auf den Mailinglisten

Re: [EasyLinux-Suse] Offlineinstallation 12.2 kde3
Luzius Eibling, 20.06.2013 08:54
Am 19.06.2013 19:14, schrieb Heiko Ißleib: > Am 19.06.2013, 19:07 Uhr, schrieb Heiko Ißleib : > >...
Re: [EasyLinux-Ubuntu] Linux Ubuntu startet nicht
"johanna@gmx", 19.06.2013 23:25
Am 19.06.2013 16:20, schrieb Antonius Dierkes: > Hallo Antonius, leider ist in Deiner Mail der Text ve...
Re: [EasyLinux-Suse] Offlineinstallation 12.2 kde3
"d.blanke@gmx.net", 19.06.2013 22:24
Heiko Ißleib schrieb: > Am 19.06.2013, 19:07 Uhr, schrieb Heiko Ißleib : > > Hallo Luzius. >...
[EasyLinux-Suse] Umstellung von KDE auf Xfce
Gerard Bekhuis, 19.06.2013 22:23
Hallo in die Runde. Ich habe auf meinem Laptop schon lange Xfce und jetzt will ich meinen Hauptrechner Zuh...
Re: [EasyLinux-Ubuntu] [SOLVED] DjVu => ePub oder PDF?
"H.-Stefan Neumeyer", 19.06.2013 21:37
Am Mittwoch, den 19.06.2013, 16:36 +0200 schrieb H.-Stefan Neumeyer: Nach dem was ich in der Zwischenzeit wei...