fstueber
Goto Top

Backuproutine

Suche Script oder Programm

Hallo Leute,
Suche Script oder Programm für Backuproutine (Windows/Linux)
In einem Backup-Ordner werden jeden Tag 2 Backupdateien (z. B: 2007-Mrz-31--1547.zip). Die letzte Zahl ist die Uhrzeit der 2. Sicherung.
Nun soll an jedem Monatsende jeweils die letzte Backupdatei in ein Verzeichnis „Archiv“ (Backup-Ordner) kopiert/verschoben werden. Der Rest der Dateien soll gelöscht werden.

Vielen Dank im voraus

fstueber

Content-ID: 56213

Url: https://administrator.de/contentid/56213

Ausgedruckt am: 27.11.2024 um 01:11 Uhr

cykes
cykes 10.04.2007 um 09:53:33 Uhr
Goto Top
Hi,

auf welchem System soll denn das Script laufen, Windows oder Linux?

Gruß

cykes
fstueber
fstueber 10.04.2007 um 09:59:54 Uhr
Goto Top
Hi,

momentan läuft es noch unter Windows2000Server. Wird aber demnächst auf einem Linux (Fedora6) installiert.

Gruß

fstueber
bastla
bastla 10.04.2007 um 10:47:18 Uhr
Goto Top
Hallo fstueber!

Für momentan hätte ich folgenden Ansatz:
@echo off & setlocal
set "BackupDir=D:\Backups"  
set "ArchivDir=Z:\Archiv"  
set Neueste=
for /f "delims=" %%i in ('dir "%BackupDir%\*.zip" /b /a-d /o-d') do if not defined Neueste set "Neueste=%%i"  
echo move "%BackupDir%\%Neueste%" "%ArchivDir%" && echo del "%BackupDir%\*.zip" || echo Fehler beim Verschieben von %Neueste%  
Die ersten beiden "echo" in der letzten Zeile sorgen dafür, dass der Ablauf nur simuliert wird - erst, wenn Du sie entfernst, wird wirklich verschoben und gelöscht.

Grüße
bastla
bastla
bastla 10.04.2007 um 11:35:57 Uhr
Goto Top
... Nachtrag: Sollte ich Dich vorhin falsch verstanden haben und es soll von den beiden täglichen Sicherungsdateien jeweils die jüngere archiviert werden, müsste das anhand des Dateinamens so gehen:
@echo off & setlocal
set "BackupDir=D:\Backups"  
set "ArchivDir=Z:\Archiv"  
set Zuletzt=NA
for /f "delims=" %%i in ('dir "%BackupDir%\*.zip" /b /a-d /o-n') do call :ProcessFile "%%i"  
::nächstes "echo" löschen 
echo del "%BackupDir%\*.zip"  
goto :eof
:ProcessFile
for /f "delims=--" %%f in ('echo %~n1') do (  
	if /i "%%f"=="%Zuletzt%" goto :eof  
	set "Zuletzt=%%f"  
	::nächstes "echo" löschen 
	echo move "%BackupDir%\%~1" %ArchivDir% || echo Fehler beim Verschieben von %~1  
)
Vorausgesetzt wird, dass im Dateinamen (wie in Deinem Beispiel oben) die Uhrzeit durch "--" vom Tag getrennt ist.

Auch hier gilt wieder: Die beiden gekennzeichneten "echo" löschen, um die Aktionen tatsächlich ausführen zu lassen.

Grüße
bastla
fstueber
fstueber 10.04.2007 um 13:00:49 Uhr
Goto Top
Hi bastla,

vielen Dank für das Script, werde es testen.

Gruß

fstueber
fstueber
fstueber 10.04.2007 um 13:29:05 Uhr
Goto Top
Hi bastla,

habe einen Test durchgeführt. Ich bekomme einen Syntaxfehler zurück.

Gruß

fstueber
bastla
bastla 10.04.2007 um 13:54:48 Uhr
Goto Top
Hallo fstueber!

Im Allgemeinen verkrafte ich auch mehr Informationen in einem Post, als nur "Ich bekomme einen Syntaxfehler zurück." face-wink

Unter der Annahme, dass Du Dich auf die zweite Batchvariante beziehst, sollte es so besser gehen:
@echo off & setlocal
set "BackupDir=D:\Backups"  
set "ArchivDir=D:\Archiv"  
set Zuletzt=NA
for /f "delims=" %%i in ('dir "%BackupDir%\*.zip" /b /a-d /o-n') do call :ProcessFile "%%i"  
::nächstes "echo" löschen 
echo del "%BackupDir%\*.zip"  
goto :eof
:ProcessFile
for /f "tokens=1,2,3 delims=-" %%f in ('echo %~n1') do (  
    if /i "%%f-%%g-%%h"=="%Zuletzt%" goto :eof  
    set "Zuletzt=%%f-%%g-%%h"  
    ::nächstes "echo" löschen 
    echo move "%BackupDir%\%~1" %ArchivDir% || echo Fehler beim Verschieben von %~1  
)

Grüße
bastla

P.S.: Sorry, hatte mich beim Testen nur auf die Trennung Tag-Zeit konzentriert ...

[Edit] Unnötige Variable entfernt [/Edit]
fstueber
fstueber 10.04.2007 um 14:17:19 Uhr
Goto Top
Hi bastla.

noch einmal ganz kurz. Wenn ich die erste Zeile auskommentiere, sieht das Ergebnis so aus:

D:\>set "BackupDir=D:\Backups"

D:\>set "ArchivDir=D:\Backups\Archiv"

D:\>set Zuletzt=NA

D:\>for /F "delims=" %i in ('dir "D:\Backups\*.zip" /b /a-d

D:\>call :ProcessFile "2007-Mrz-31--1416.zip"
Syntaxfehler.

D:\>for /f "delims=--" %f in ('echo 2007-Mrz-31--1416')

die letze Datei wird gefunden.
bastla
bastla 10.04.2007 um 14:24:26 Uhr
Goto Top
Hallo fstueber!

Nimm bitte zum Testen nochmals die letzte von mir gepostete Variante.

Grüße
bastla
fstueber
fstueber 10.04.2007 um 14:25:22 Uhr
Goto Top
Hi bastla,

sorry wegen der spärlichen Info.
Allles besten und vielen Dank.

fstueber
bastla
bastla 10.04.2007 um 14:29:53 Uhr
Goto Top
Hallo fstueber!

Never mind ... (Hab heute nicht den besten Tag, sonst wäre es vielleicht gar nicht nötig gewesen, Fehlerberichte zu posten.)

Grüße
bastla
fstueber
fstueber 10.04.2007 um 14:31:49 Uhr
Goto Top
Hallo bastla,

die e-Mails haben sich überkreuzt.
Vielen Dank für Deine kompetente und schnelle Hilfe.

Grüße
fstueber
Biber
Biber 10.04.2007 um 15:32:06 Uhr
Goto Top
Moin fstueber,

wollen wir jetzt
a) den Beitrag auf "gelöst" setzen? DONE by fstueber 10.4.2007...
b) den Beitrag auf "geschlossen" setzen? DONE by Biber 11.4.2007
c) den Beitrag offen lassen und weitermachen, wenn Dein Linux-Server da ist? Gestrichen 11.4. Biber
d) oder dann einen neuen Thread aufmachen?
e) alles nach "Batch und Shell" verschieben? DONE by Biber 10.4.2007

Mehrfachnennungen möglich, aber nicht alle Kombinationen kann ich umsetzen...

Gruss
Biber
[Edit] 11.4. Mögliche Optionen etwas weiter eingeschränkt *gg und Thread geschlossen [/Edit]