Archiv mit gzip?

Antworten
Nachricht
Autor
ottto
Beiträge: 176
Registriert: 09. Sep 2004 15:00

Archiv mit gzip?

#1 Beitrag von ottto » 06. Feb 2012 15:20

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

Benutzeravatar
Janka
Beiträge: 3581
Registriert: 11. Feb 2006 19:10

#2 Beitrag von Janka » 06. Feb 2012 17:12

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: Alles auswählen

#!/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
Beiträge: 176
Registriert: 09. Sep 2004 15:00

#3 Beitrag von ottto » 09. Feb 2012 8:39

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

Benutzeravatar
Janka
Beiträge: 3581
Registriert: 11. Feb 2006 19:10

#4 Beitrag von Janka » 09. Feb 2012 18:59

ottto hat geschrieben: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
Beiträge: 176
Registriert: 09. Sep 2004 15:00

#5 Beitrag von ottto » 10. Feb 2012 10:39

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

Benutzeravatar
Janka
Beiträge: 3581
Registriert: 11. Feb 2006 19:10

#6 Beitrag von Janka » 10. Feb 2012 23:33

ottto hat geschrieben: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: Alles auswählen

#!/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.

Antworten