PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Script für Tagessicherung



03-12-2000, 10:17
Hallo,

alle in einem Verzeichnis geänderten Daten des Vortages sollen in ein File geschrieben und gezippt werden. Das Zip-File sollte mit WINZIP einsehbar sein. Das File bekommt das aktuelle Datum als Namen.

Gibt es bereits unterstützende Progs bei Suse?
Findet man Scripte mit einer ähnlichen Lösung ...wo?
Kann mir jemand Tipps geben wo ich ansetzen kann?

cp und tar habe ich schon ausprobiert, hat aber nicht so ganz geklappt (Anfänger).

Über Tipps zur Lösungsfindung würde ich mich freuen.

Schon mal Danke im Voraus!

rfi

04-12-2000, 13:01
Hi,
ich hoffe ich kann Dir helfen. Allerdings finde ich nichts so ungut, wie Sicherungen, bei denen nicht alles gesichert wird. Insofern weiß ich momentan auch nicht, wie man die Dateien vom letzten Tag holen könnte.
Aber die Sicherung aller Dateien in einem Verzeichnis in ein Zip mit Tagesdatum sollte so gehen:

***********
#!/bin/bash

cd /VERZEICHNIS-PFAD
# hier richtigen Pfad eingeben
name=`date "+./%Y-%m-%d"`
/usr/bin/zip -q -v -r $name.zip * >./$name.doc
************
in $name.doc stehen alle Dateien, die gezippt wurden.
MfG,
Werner

thommy
04-12-2000, 13:15
Finde alle Dateien im aktuellen Verzeichnis, die innerhalb der vergangenen 24 Stunden modifiziert wurden:

<pre>
find . -mtime -1
</pre>

Thomas

Manfred-B
04-12-2000, 22:28
Hallo
Nur die Files von gestern? Kein Problem
find /verzeichnis -daystart -mtime 1
Von gestern 0:00 - 23:59:59

Mit dem Datum von gestern? Nicht so einfach.
Wieviele Tage hat der Monat? mal so mal so



#!/bin/bash

# wo du wolle?
verzeichnis=$1 # das 1. Argument in der kommandozeile
: ${verzeichnis:=~/} # homedir ist default falls kein Argument
zielverz=/tmp

i=$(find ${verzeichnis} -daystart -type f -maxdepth 1 -mtime 1) # 1 für gestern
if test -z "${i}";
then
echo nichts gefunden
exit 1
fi
### min 1 filename gefunden ###
set -- ${i} # den positionsparametern zuweisen
# den erstbesten nehmen für das datum von gestern "${1}"
# alle mit zip komprimieren "${i}"
zip ${zielverz}/$(date -r ${1} +%d.%m.%Y) ${i}



Weis das jemand besser?
Ich suche schon länger nach einem Weg (mit der bash) um einen UNIX timestamp (sek seit 31.12.1969) in ein Datum zurückzuwandeln.
Z.B. in /etc/adjtime
Damit wäre auch dies nur noch eine einfache Rechnung

Grüsse

06-12-2000, 07:50
Hallo,

vielen Dank für die Infos. Das hilft mir schon sehr weiter. Ich werde nun mal weiterbohren.

Grüße

rfi

08-12-2000, 16:09
Hallo Manfred-B,

ich nutze dein Script mit einer kleinen Einschränkung:

Filenamen in der Form: "Erstes dokument.doc"
werden von zip nicht verarbeitet.

Das Leerzeichen im Filenamen wird nicht angenommen und als Teil des Pfades für zip interpretiert.

Man pages durchsucht/ Suse-Datenbank durchsucht/ zip-homepage durchsucht-> keine Lösung gefunden.

Kann mir hier jemand weiterhelfen?

Schon mal Danke!

rfi

08-12-2000, 16:19
Moin,

setz die $i mal in Anführungszeichen

= "$i"

08-12-2000, 18:38
Hi mws,

hab ich gemacht. Es hat sich nichts geändert.
Fehlermeldung:

zip warning: name not matched: /Erstes
zip warning: name not matched: document.doc

zip nimmt immer noch an "Erstes" wäre ein Pfadbestandteil.

Danke für die prompte Antwort!! Mist, fast alles funktioniert, nur diese Kleinigkeit!

rfi


[Dieser Beitrag wurde von rfi am 08. Dezember 2000 editiert.]

Manfred-B
09-12-2000, 07:44
moin moin
Schreibe anstelle von $i => find ... -print0 also:
zip ${zielverz}/$(date -r ${1} +%d.%m.%Y) $(find test/ -print0)
der haken: falls zufällig der erste filename ein leerz enthält (bei der auswertung des datums) gibts einen fehler, sodaß es nur meistens geht http://www.linuxforen.de/ubb/frown.gif aber immerhin

Sobald man einer variablen eine dateiliste zuweist werden alle newline zu spaces; i=$(find test/ -printf %p\\n) funkt. also auch nicht!
Vieleicht kann man auch was mit der env.var $IFS machen?

Grüsse

Manfred-B
10-12-2000, 00:45
Hallo!
Also das war ja schwierig!


#!/bin/bash

verzeichnis=$1 # das 1. Argument in der kommandozeile
: ${verzeichnis:=~/} # homedir ist default falls kein Argument
zielverz=/tmp
IFS='°
' # Internal File Separator - ich hab mich für '°' und newline entschieden! somit sollte kein '°' in den filename vorkommen!
i=$(find ${verzeichnis} -daystart -type f -maxdepth 1 -mtime 1 -printf %p°) # 1 für gestern
#i=$(find ${verzeichnis} -daystart -type f -maxdepth 1 -mtime 1 -printf '%Td.%Tm.%TY ')
# eine liste mit dem Datum von gestern

if test -z "${i}";
then
echo nichts gefunden
exit 1
fi
### min 1 filename gefunden ###
set -- ${i} # den positionsparametern zuweisen
# den erstbesten nehmen für das datum von gestern "${1}" alle datum sollten gleich sein
# alle mit zip komprimieren $(find ... ) eben nochmal
#IFS=':
#'
#zip ${zielverz}/${1} $(find ${verzeichnis} -daystart -type f -maxdepth 1 -mtime 1 -printf %p : )

zip ${zielverz}/$(date -r ${1} +%d.%m.%Y) ${i}

entweder die auskommentierten oder die aktiven Zeilen - jetzt sollen beide gehen

Die zuweisung IFS=°newline gilt nur in der subshell in der das skript ausgeführt wird!
Gut so, sonst funktioniert nichts mehr, nichtmal 'ls' da für ls ein alias gesetzt ist welcher word splitting benötigt '/bin/ls' geht also noch

Die Methode mit find das Datum auszugeben (-printf %T...) ist sicher eleganter.

Dennoch bin ich sehr unzufrieden mit einer
solchen Vorgehensweise.
Es muß einen Weg geben das Datum von gestern korrekt zu errechnen!

Grüsse

[Dieser Beitrag wurde von Manfred-B am 10. Dezember 2000 editiert.]

10-12-2000, 20:17
Hallo Manfred-B,

das ist stark.. und wesentlich mehr als ich erwartet hatte.

Das Script funktioniert einwandfrei und hat sich bereits in Verbindung mit älteren Gesamtsicherungen bewährt.

Vielen Dank nochmal!!!

rfi