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
Archiv mit gzip?
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?
Der Trick bei der Sache ist, dass die Shell alles automatisch expandiert und globbing anwendet, wenn irgendwas nicht in Häkchen steht.
Janka
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
Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
Ich mag die Schreie.
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
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
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.ottto hat geschrieben:Hallo Janka,
vielen Dank für die Antwort.
Leider bekomme ich die Dateinamen nicht in die Variable FILES.
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.
Ich mag die Schreie.
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
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
Dann ist es vermutlich keine Bash, sondern Ash oder die Busybox-Shell. Da nimmst du dann statt $() Backticks, also so:ottto hat geschrieben:Bei der Variablenzuweisung kommen Fehler.
Code: Alles auswählen
#!/bin/sh
FILES=`echo TestDateien*`
Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
Ich mag die Schreie.