fix: das Alter kommt aus dem NAMEN, nicht aus dem Zeitstempel
Der erste echte Lauf auf dem Heimrechner sagte:
d4rk_media-2026-08-11-2307.tar.gz, 0 Tage alt
Ein Archiv vom 11. August, an einem 13. August, mit "0 Tage alt" -- und
ausserdem war es gar nicht das neueste. Beides derselbe Fehler: ich habe nach
LastWriteTime sortiert und gerechnet, und die setzt der Nextcloud-Client auf
den Zeitpunkt des HERUNTERLADENS.
Damit war der Alarm wertlos. Er haette nie ausgeloest, weil frisch geholte
Archive immer taufrisch aussehen -- also genau in dem Fall geschwiegen, fuer
den er gebaut ist.
Jetzt wird das Datum aus dem Dateinamen gelesen (d4rk_media-2026-08-13-0929,
d4rkbot-2026-08-12). Das ist das Datum der SICHERUNG, und es ueberlebt jedes
Kopieren. Faellt der Name aus dem Muster, bleibt der Zeitstempel als Notnagel.
Nachgemessen mit Dateien, die ALLE den heutigen Zeitstempel tragen:
neuestes erkannt: d4rk_media-2026-08-13-0929 0 Tage
dieses entfernt -> d4rkbot-2026-08-12 1.4 Tage
Ausserdem sagt die Zeile jetzt, wieviel in der QUELLE liegt: "0 neu, 3 in der
Ablage, 5 in der Quelle" beantwortet die Frage, ob der Client ueberhaupt schon
durch ist -- "3 insgesamt" allein tat das nicht.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+29
-3
@@ -49,6 +49,31 @@ function Schlecht($t) { Write-Host " $t" -ForegroundColor Red }
|
|||||||
|
|
||||||
$MUSTER = @('*.tar.gz', '*.db.gz')
|
$MUSTER = @('*.tar.gz', '*.db.gz')
|
||||||
|
|
||||||
|
# Das Datum aus dem NAMEN lesen, nicht aus dem Zeitstempel der Datei.
|
||||||
|
#
|
||||||
|
# WARUM: der Nextcloud-Client setzt LastWriteTime auf den Zeitpunkt des
|
||||||
|
# HERUNTERLADENS. Ein Archiv vom 11. August, das heute ankommt, sieht damit
|
||||||
|
# taufrisch aus -- und der Alarm "es kommt nichts mehr an" würde nie
|
||||||
|
# auslösen, weil alles immer neu wirkt. Genau das ist beim ersten echten Lauf
|
||||||
|
# passiert: "d4rk_media-2026-08-11-2307.tar.gz, 0 Tage alt".
|
||||||
|
#
|
||||||
|
# Der Name trägt das Datum der SICHERUNG, und der überlebt jedes Kopieren:
|
||||||
|
# d4rk_media-2026-08-13-0929.tar.gz
|
||||||
|
# d4rkbot-2026-08-13.db.gz
|
||||||
|
function ArchivDatum($datei) {
|
||||||
|
if ($datei.Name -match '(\d{4})-(\d{2})-(\d{2})(?:-(\d{2})(\d{2}))?') {
|
||||||
|
$std = if ($Matches[4]) { [int]$Matches[4] } else { 0 }
|
||||||
|
$min = if ($Matches[5]) { [int]$Matches[5] } else { 0 }
|
||||||
|
try {
|
||||||
|
return Get-Date -Year ([int]$Matches[1]) -Month ([int]$Matches[2]) -Day ([int]$Matches[3]) `
|
||||||
|
-Hour $std -Minute $min -Second 0
|
||||||
|
} catch { }
|
||||||
|
}
|
||||||
|
# Kein Datum im Namen -- dann bleibt nur der Zeitstempel, mit allen
|
||||||
|
# Nachteilen. Besser als gar keine Reihenfolge.
|
||||||
|
return $datei.LastWriteTime
|
||||||
|
}
|
||||||
|
|
||||||
# -- Als Aufgabe eintragen ------------------------------------------------------
|
# -- Als Aufgabe eintragen ------------------------------------------------------
|
||||||
|
|
||||||
if ($Einrichten) {
|
if ($Einrichten) {
|
||||||
@@ -172,12 +197,13 @@ robocopy $qVoll $zVoll @MUSTER /XO /R:2 /W:5 /NP /NJH /NJS /NDL /NC /NS | Out-Nu
|
|||||||
# robocopy meldet ueber den Rueckgabewert: alles unter 8 ist Erfolg.
|
# robocopy meldet ueber den Rueckgabewert: alles unter 8 ist Erfolg.
|
||||||
if ($LASTEXITCODE -ge 8) { Schlecht "robocopy meldet Fehler ($LASTEXITCODE)"; exit 1 }
|
if ($LASTEXITCODE -ge 8) { Schlecht "robocopy meldet Fehler ($LASTEXITCODE)"; exit 1 }
|
||||||
$nachher = & $zaehlen
|
$nachher = & $zaehlen
|
||||||
Gut "$($nachher - $vorher) neu, $nachher insgesamt"
|
$inQuelle = @(Get-ChildItem $qVoll -File | Where-Object { $_.Name -match '\.(tar|db)\.gz$' }).Count
|
||||||
|
Gut "$($nachher - $vorher) neu, $nachher in der Ablage, $inQuelle in der Quelle"
|
||||||
|
|
||||||
# -- Ausdünnen ------------------------------------------------------------------
|
# -- Ausdünnen ------------------------------------------------------------------
|
||||||
|
|
||||||
$alle = @(Get-ChildItem $zVoll -File | Where-Object { $_.Name -match '\.(tar|db)\.gz$' } |
|
$alle = @(Get-ChildItem $zVoll -File | Where-Object { $_.Name -match '\.(tar|db)\.gz$' } |
|
||||||
Sort-Object LastWriteTime -Descending)
|
Sort-Object @{ Expression = { ArchivDatum $_ } } -Descending)
|
||||||
if ($alle.Count -gt $Behalten) {
|
if ($alle.Count -gt $Behalten) {
|
||||||
Schritt "Alte Staende entfernen (mehr als $Behalten)"
|
Schritt "Alte Staende entfernen (mehr als $Behalten)"
|
||||||
$alle | Select-Object -Skip $Behalten | ForEach-Object {
|
$alle | Select-Object -Skip $Behalten | ForEach-Object {
|
||||||
@@ -194,7 +220,7 @@ if (-not $neuestes) {
|
|||||||
$text = 'In der Ablage liegt KEINE einzige Sicherung.'
|
$text = 'In der Ablage liegt KEINE einzige Sicherung.'
|
||||||
Schlecht $text
|
Schlecht $text
|
||||||
} else {
|
} else {
|
||||||
$tage = [math]::Round(((Get-Date) - $neuestes.LastWriteTime).TotalDays, 1)
|
$tage = [math]::Round(((Get-Date) - (ArchivDatum $neuestes)).TotalDays, 1)
|
||||||
if ($tage -gt $AlarmNachTagen) {
|
if ($tage -gt $AlarmNachTagen) {
|
||||||
$text = "Die neueste Sicherung ist $tage Tage alt ($($neuestes.Name)). Es kommt nichts mehr an."
|
$text = "Die neueste Sicherung ist $tage Tage alt ($($neuestes.Name)). Es kommt nichts mehr an."
|
||||||
Schlecht $text
|
Schlecht $text
|
||||||
|
|||||||
Reference in New Issue
Block a user