Page 1 of 1

Archiv mit gzip?

Posted: 06. Feb 2012 15:20
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

Posted: 06. Feb 2012 17:12
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

Posted: 09. Feb 2012 8:39
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

Posted: 09. Feb 2012 18:59
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

Posted: 10. Feb 2012 10:39
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

Posted: 10. Feb 2012 23:33
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