Archiv mit gzip?

Post Reply
Message
Author
ottto
Posts: 176
Joined: 09. Sep 2004 15:00

Archiv mit gzip?

#1 Post by ottto »

Hallo,
ich hab Verzeichnisse in die täglich mehrere tausend kleine Deiteien gelegt werden.
Diese Dateien möchte ich täglich in ein neues Archiv verschieben.

Funktioniert mit:
gzip -c TestDateien* > TestArchiv$(date +%Y%m%d).gz

nur das dabei die Quelldateien nicht gelöscht werden.
Gibt es dazu vielleicht noch eine Option?
Oder ist gzip nicht das richtige Toll? Bekomme es mit tar aber auch nicht hin.

Danke.
ottto

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#2 Post by Janka »

Dir ist aber schon klar, dass Gzip kein Archivierungswerkzeug ist? Hast du schonmal probiert, dein "Archiv" wieder auszupacken? Da kriegst du nicht etwa einen Haufen Dateien heraus, sondern eine große Datei, die aus den aneinandergehängten kleinen Dateien besteht. Man kann die Dateien im "Archiv" mit Gefummel wieder auseinanderbekommen, allerdings erscheint mir das angesichts der Existenz von tar und cpio reichlich umständlich.

Was hält dich ansonsten davon ab, erst einmal die gewünschten Dateinamen in eine Variable umzuleiten, dann die Dateien aus der Variable zu archivieren und danach zu löschen?

Code: Select all

#!/bin/bash
FILES="$(echo TestDateien*)"
tar -czf TestArchiv$(date +%Y%m%d).tar.gz $FILES
rm $FILES
Der Trick bei der Sache ist, dass die Shell alles automatisch expandiert und globbing anwendet, wenn irgendwas nicht in Häkchen steht.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

ottto
Posts: 176
Joined: 09. Sep 2004 15:00

#3 Post by ottto »

Hallo Janka,
vielen Dank für die Antwort.
Leider bekomme ich die Dateinamen nicht in die Variable FILES.
Ich kann ls in eine Datei umleiten ls > liste.txt
Bekomme den Inhalt dann aber auch nicht in die Variable FILES="$(cat liste.txt)"

Wie bekomme ich die Ausgabe von "ls" in die Variable?

Danke.
ottto

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#4 Post by Janka »

ottto wrote:Hallo Janka,
vielen Dank für die Antwort.
Leider bekomme ich die Dateinamen nicht in die Variable FILES.
So wie ich es dir schrieb geht das. "echo Bla*" gibt alle Dateinamen im aktuellen Verzeichnis aus, auf die der Glob Bla* passt. ls brauchst du dafür nicht.

Wenn du mehr Dateinamen hast als in die Kommandozeile passen, kannst du die Option -T von tar benutzen.

$ man tar

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

ottto
Posts: 176
Joined: 09. Sep 2004 15:00

#5 Post by ottto »

sorry!!!!

ich hab versucht die Funktionalität auf einem FreeNAS -System einzurichten (wo die Daten auch abgelegt werden).
Es gibt dort zwar tar, echo, ls, gzip, usw. , ist aber doch kein Linux bzw. keine richtige Shell. Bei der Variablenzuweisung kommen Fehler.

Ich ab Deine Zeilen auf meinem LinuxServer erfolgreich getestet.
Ich werde versuchen die Daten von dort zu packen.

Vielen Dank.
ottto

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#6 Post by Janka »

ottto wrote:Bei der Variablenzuweisung kommen Fehler.
Dann ist es vermutlich keine Bash, sondern Ash oder die Busybox-Shell. Da nimmst du dann statt $() Backticks, also so:

Code: Select all

#!/bin/sh
FILES=`echo TestDateien*`
Da du bei deinem Kommandobeispiel die $()-Syntax benutzt hast, bin ich natürlich von Bash ausgegangen.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Post Reply