• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Archive umwandeln -> bz2 in gz

macro

Newbie
Hallo!

ich hab leider aufgrund einer Fehlerkonfiguration bz2 statt gz Dateien erstellt (Logrotation). Leider brauche ich unbedingt gz Dateien.

Ein Script welches ungefähr so arbeitet würde ich suchen

find *.bz2 --> bunzip2 --> gzip

Wobei find rekursiv durchsuchen sollte nach möglichkeit (1 Ordnerebene) und bunzip die gefundenen dateien einzeln übergibt und die entpackten dateien (ist jeweils immer nur 1 datei) wieder an gzip übergeben werden soll.

Ich hab mit | usw. herumexperimentiert aber leider bin ich auch keinen grünen zweig gekommen. Schätze es ist nur ein Einzeiler.

Vielleicht könnte mir jemand helfen.
Wenn jemand eine _gute_ Dokumentation über | usw. kennt bitte um bekanntgabe der URL :)

Danke!
 

nbkr

Guru
Das nach /opt/umzipper.sh packen und ausführbar machen.

Code:
#! /bin/bash

filename=$1
withoutbz2=`echo $filename | sed s/\.bz2//g`
echo "bunzip2 -c $filename | gzip > ${withoutbz2}.gz"
echo "rm $filename"

Dann im Logordner folgendes ausführen.

Code:
find ./ -name *.bz2 -exec /opt/umzipper.sh {} \;


Warung: Ich hab das Script nicht getestet. Backup bringt also Extraleben!



Wenn alles gut aussieht, die echos und die "" in den echo Zeilen aus dem "umzipper.sh" rausnehmen. Dann ist das Script scharf geschaltet.
 
Netter Benchmark. Aber nur für Leute, die zuviel Zeit haben.
BTW, es geht kürzer und einfacher:
Code:
#!/bin/bash
bzip2 -cd "$1" | gzip -9 >"${1%.bz2}.gz" && rm -f "$1";
 
OP
M

macro

Newbie
Hallo nbkr und jengelh!

Vielen Dank für die Antworten,

hab mich jetzt entschlossen das erste längere script zu verwenden, da es für mich persönlich durchsichtiger war und mit den "echo"-Zeilen besser zu testen.

Es hat wunderbar funktioniert und genau das gebracht was ich wollte.

Werd aber aus interesse das 2. Script analysieren da man so bekanntlich ja am besten dazulernt!

Danke nochmal!

PS: Das Script dauerte ca. 2-3 Minuten bei ungefähr 600 Dateien (zwischen 50kb und 6 MB der gz Datei) find ich in Ordnung für ein Script welches 1x ausgeführt werden muss :)
 

regexer

Advanced Hacker
macro schrieb:
Werd aber aus interesse das 2. Script analysieren da man so bekanntlich ja am besten dazulernt!
Vom Ablauf her ist der Unterschied der beiden Scripte nicht sehr groß. Das obere Script verwendet sed zum Abschneiden der Endung, das untere verwendet die bash.

Aaaaaber: Das 2. Script ist vor allem sicherer.
Zum einen gehört die Variable mit dem Feldnamen ist doppelte Hochkommas (falls ein Leerzeichen im Dateinamen vorkommt).
Zum anderen ist doch das Löschen der Ursprungsdatei nur sinnvoll, wenn der unzip und der erneute zip erfolgreich war. Und das macht das &&.
 
OP
M

macro

Newbie
jengelh schrieb:
Wieso kannst du die Files nicht als .bz2 belassen?

Weil die Dateien per SFTP abgeholt werden und dann einem Fremdsystem übergeben werden. (Webtrends)
Es war ausgemacht, dass gz Dateien geliefert werden und beim letzten Servertausch war die Logrotation auf bz2 statt auf gz eingestellt.
Das letzte mal war das Standardmäßig anders eingestellt.

Naja und wenn das ganze 7 Tage unbemerkt so läuft gibt es einige Dateien zum umwandeln...

Danke nochmal!
 
Oben