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:
2026-08-13 10:27:38 +02:00
co-authored by Claude Opus 5
parent 9e4132cc7e
commit befa393b84
+29 -3
View File
@@ -49,6 +49,31 @@ function Schlecht($t) { Write-Host " $t" -ForegroundColor Red }
$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 ------------------------------------------------------
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.
if ($LASTEXITCODE -ge 8) { Schlecht "robocopy meldet Fehler ($LASTEXITCODE)"; exit 1 }
$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 ------------------------------------------------------------------
$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) {
Schritt "Alte Staende entfernen (mehr als $Behalten)"
$alle | Select-Object -Skip $Behalten | ForEach-Object {
@@ -194,7 +220,7 @@ if (-not $neuestes) {
$text = 'In der Ablage liegt KEINE einzige Sicherung.'
Schlecht $text
} else {
$tage = [math]::Round(((Get-Date) - $neuestes.LastWriteTime).TotalDays, 1)
$tage = [math]::Round(((Get-Date) - (ArchivDatum $neuestes)).TotalDays, 1)
if ($tage -gt $AlarmNachTagen) {
$text = "Die neueste Sicherung ist $tage Tage alt ($($neuestes.Name)). Es kommt nichts mehr an."
Schlecht $text