WinFuture-Forum.de: Bitte um kurze Script-Prüfung - Dateien/Verzeichnisse älter als X-Tage - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Bitte um kurze Script-Prüfung - Dateien/Verzeichnisse älter als X-Tage

#1 Mitglied ist offline   Stefan_der_held 

  • Gruppe: Offizieller Support
  • Beiträge: 12.715
  • Beigetreten: 08. April 06
  • Reputation: 399

geschrieben 26. Oktober 2016 - 12:49

Hallo Leute,

ich suche nach einer automatisierten Möglichkeit ein Dateibackup (Ordner wird täglich gesichert) aufzuräumen.

Ist-Zustand:

Script erstellt jeden Tag einen neuen Unterordner:

D:\Sicherung\[DATUM-DES-TAGES]


und speichert dort die zu sichernden Files vollständig (nicht inkrementell oder differentiell, somit unabhängig voneinander) ab.

Nun möchte ich jedoch, dass regelmäßig ein zweites Script läuft (bzw. ich das vorhandene erweitere) welches Sicherungen löscht welche ein gewisses Alter erreicht haben. Bin da auf einen für mich unbekannten Operator gestoßen namens
forfiles


scheint ja das zu machen was ich wünsche - richtig angewandt. Da diese Funktion für mich wirklich mal Neuland ist würde ich kurz um Prüfung bitten

forfiles /P D:\Sicherung /S /M /D -[X-TAGE] "cmd /c del /q @path"


würde ich da verwenden damit die entsprechenden Ordner samt Inhalt gelöscht werden sofern diese älter sind als X-Tage.

Ist das korrekt oder wird das Script Amok laufen? :unsure:

Dieser Beitrag wurde von Stefan_der_held bearbeitet: 26. Oktober 2016 - 12:51

Eingefügtes Bild
0

Anzeige

#2 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 7.768
  • Beigetreten: 20. Juli 07
  • Reputation: 861

geschrieben 26. Oktober 2016 - 13:03

Das Script wird wohl eher gar nicht laufen. :ph34r:

Du hast /M angegeben, aber /M will eine Maske haben für Dateien, die von forfiles verarbeitet werden sollen. Also vielleicht *.omg oder weiß der Geier. Wenn Du alle haben willst, kannst Du /M weglassen.

- Verzeichnisse werden so übrigens nicht gelöscht.

- Ansonsten sieht das so aus, als ob es passen würde.

- Alternative: Powershell, wo Du direkt auf $object.LastWriteTime zugreifen kannst, und dann jeweils was damit machen kannst oder halt nicht.

Also in etwa
Get-ChildItem -Path D:\Sicherung -Recurse | Where-Object {$_.LastWriteTime -lt <DeineZeitangabe>} | Remove-Item -WhatIf:$true


wobei das erstmal auflistet, was passieren WÜRDE. Fürs Scharfschalten dann -WhatIf auf $false setzen oder weglassen.

-- Statt dem Konstrukt oben kannst Du natürlich auch eine Differenz über "jetziger Zeitstempel" und "abzüglich X Tage" basteln und das als "DeineZeitangabe" oben verwenden.

Dieser Beitrag wurde von RalphS bearbeitet: 26. Oktober 2016 - 13:05

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
1

#3 Mitglied ist offline   Stefan_der_held 

  • Gruppe: Offizieller Support
  • Beiträge: 12.715
  • Beigetreten: 08. April 06
  • Reputation: 399

geschrieben 26. Oktober 2016 - 13:09

Ah danke dir.
Powershell kommt leider nicht in Frage. Da müsste ich wohlmöglich erst mein Sicherungscript portieren was noch auf "good-old-CMD" basiert ;D

Aber wenn ich das dann richtig verstehe müsste anstatt "del" ein "rmdir /s /q" als auszuführender Befehl die Arbeit erledigen also so:

forfiles /P D:\Sicherung /S /D -[X-TAGE] "cmd /c rmdir /s /q @path"


Oder bin ich da auf dem völlig falschen Dampfer gelandet?
Eingefügtes Bild
0

#4 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 7.768
  • Beigetreten: 20. Juli 07
  • Reputation: 861

geschrieben 26. Oktober 2016 - 20:39

Wie tief gehen denn die Verzeichnisse?

Mit dem rd /S /q bin ich mir grad gar nicht sicher. Ich mein, ja, das löscht Verzeichnisse ohne Rückfrage. Mitsamt dem Inhalt. Nur: dann mußt Du Dich auch drauf verlassen können, daß das Datum stimmt.

Wenn Du:

- Nach \Sicherung\Gestern\ wechselst
- Dort eine Textdatei erstellst "README.FIRST" und speicherst

dann wird der Zeitstempel für den Ordner "Gestern" mit aktualisiert und Dein Aufräumscript frißt ihn mit.

Quatsch mit Soße :lol: Du suchst ja nach den ALTEN Dateien, nicht den neuen. :blush: Also, ja, so wie Du schreibst "sollte" es auch funktionieren. Restrisiko dann, wenn es Unterverzeichnisse gibt, denn die Aktualisierung der Zeitstempel kaskadiert NICHT.

Oder anders gesagt, wenn Du \Sicherung\Backups\Heute\ hast und Du schreibst in Heute was rein, dann kriegen die Datei selber und der Ordner "Heute" den neuen Zeitstempel. "Backups" darüber aber nicht und wenn Du Pech hast läuft das aus dem Ruder und Dein Script denkt, aha der ist alt genug, kann weg.

Deswegen würd ich da schon lieber per del /q ran und einer Maske /M *-punkt-wasimmerdasbeidirfürerweiterungensind hinzufügen, damit der auch nur das löscht, was er auch wirklich löschen *soll*.

Und wenn Du keine weiteren Unterverzeichnisse da drin hast, kannst Du zum Abschied noch ein for /d %n in (*) do @rd "%n" hintendranhängen. Idealerweise mit 2> NUL am Ende. Dann werden alle leeren Verzeichnisse entfernt, ohne weitere Fehlermeldungen (die es garantiert gibt, nämlich für alle nicht-leeren Verzeichnisse).

Dieser Beitrag wurde von RalphS bearbeitet: 26. Oktober 2016 - 20:44

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0