mgrotjans
Goto Top

Dateien nach Zeitbereich löschen

Hallo,
ich muss irgendwie Datein Löschen, die Nachts erstellt wurden.
(Datum ist egal, Uhrzeit zwischen 23:00 Uhr und 06:00 Uhr)

Hintergrund:
Zahlreiche WebCams an den Baustellen schieben alle 10 Minuten ein Bild via FTP auf unseren Server.
(Leider gibt es in den Cams keine Zeitsteuerung dazu)
Die Nachtaufnahmen sind alle nicht brauchbar, liegen aber im Ordner und somit auch in jeder Datensicherung.
Da würde ich gerne ab und an eine Batchdatei laufen lassen, die alle Bilder zwischen 23:00 und 06:00 Uhr löscht!

Hat da jemand einen Tipp für mich?

Danke schon mal im voraus.

Gruß, Markus

Content-Key: 248158

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

Printed on: April 18, 2024 at 20:04 o'clock

Member: killtec
killtec Sep 03, 2014 updated at 07:44:33 (UTC)
Goto Top
Hi,
ich könnte mir was mit der Powershell vorstellen, dass man sich die Daten erst raussucht und dann auf das Löschkommando piped.

P.S.: Um welches System handelt es sich denn? Linux / Windows

Gruß
Member: IceAge
IceAge Sep 03, 2014 at 07:58:01 (UTC)
Goto Top
Servus Markus,

ich realisiere bei mir sowas via batch... Hier ein paar Anregungen:

Dateien per Batch löschen, älter als X Tage

http://www.horstmuc.de/wbat32.htm

Die Suchfunktion schmeisst noch ein paar weitere Treffer aus...

Grüßce Ice
Member: mgrotjans
mgrotjans Sep 03, 2014 at 08:12:16 (UTC)
Goto Top
System ist Windows Server 2008 R2
Member: mgrotjans
mgrotjans Sep 03, 2014 updated at 08:16:51 (UTC)
Goto Top
Hallo Ice,
die Vorschläge sind ja im Ansatz ganz nett, aber ich möchte ja nicht Dateien löschen die älter als 3 Tage sind, sondern nur die, die zwischen 23:00 und 06:00 Uhr erstellt wurden.
Die Batch in dem Beispiel löscht alles, was älter als X Tage ist. Die Software ebenfalls.
Ich brauche aber die Bilder, die Tagsüber gespeichert wurden...

Gruß, Markus
Member: killtec
killtec Sep 03, 2014 at 08:20:51 (UTC)
Goto Top
Was fertiges wird es nicht geben.
Schau dir mal die Powershell an. Mit get-childitem kannst du die Dateien anzeigen lassen. Du musst diese dann noch Filtern (direkt oder mit select...). Anschließend kannst du das an remove-item pipen.

Gruß
Member: colinardo
Solution colinardo Sep 03, 2014 updated at 14:04:14 (UTC)
Goto Top
Moin Markus,
Zitat von @mgrotjans:
die Vorschläge sind ja im Ansatz ganz nett, aber ich möchte ja nicht Dateien löschen die älter als 3 Tage
sind, sondern nur die, die zwischen 23:00 und 06:00 Uhr erstellt wurden.
kein Problem, mit Powershell so:
gci 'd:\webcam\*.jpg' | ?{$_.CreationTime.Hour -ge 23 -or $_.CreationTime.Hour -lt 6} | remove-item -force
oder mit Batch etwa so:
@echo off & setlocal enabledelayedexpansion
set "folderImages=D:\webcam"  
for /f "tokens=1,2* delims=^|" %%a in ('forfiles /P "%folderImages%" /s /M *.jpg /c "cmd /c echo @ftime^|@path" 2^>nul') DO @(  
	set time=%%a
	if "!time:~0,1!" == "0" (set /a hours=!time:~1,1!) else (set /a hours=!time:~0,2!)  
	if !hours! GEQ 23 del %%b
	if !hours! LSS 6 del %%b
)
Grüße Uwe
Member: mgrotjans
mgrotjans Sep 03, 2014 at 12:51:38 (UTC)
Goto Top
Danke für die Skripte.
Leider läuft da keines von beiden. Habe den Pfad angepasst, aber leider ohne Ergebnis.
Powershell gestartet und die Skriptzeile eingegeben... Nix passiert.
Als PS1 Datei ausgeführt mit Powershell, nix passiert.
Die Stapeldatei läuft ohne Fehler durch, aber nix passiert. (Habe den Echobefehl auch mal gelöscht, aber keine Fehlermeldung...)
Da weiß ich jetzt nicht so recht weiter....
Member: colinardo
colinardo Sep 03, 2014 updated at 13:11:03 (UTC)
Goto Top
Leider läuft da keines von beiden
laufen hier beide einwandfrei, du musst etwas falsch machen .... Pfad und Dateiextension(*.jpg) must du natürlich anpassen. Die Files müssen sich im angegebenen Ordner und nicht in Unterordnern befinden, wenn du auch Unterordner rekursiv durchlaufen willst, müssen die Scripte geringfügig angepasst werden !
Beim Powershell-Script der -recurse Parameter bei gci und beim Batch der Parameter /s im forfiles Befehl.

Die Kollegen können sicher bestätigen das die Scripte laufen, hier tun sie das was sie sollen.
Member: mgrotjans
mgrotjans Sep 03, 2014 updated at 13:32:24 (UTC)
Goto Top
Hallo,
Danke für die Geduld mit mir face-wink
Dumm gelaufen. Zuerst war mal Powershell Skripte gesperrt... Erledigt!
Skripte laufen jetzt. Im Testordner das ganze gestartet! Powershell läuft und scrollt durch die Files...
...NIX GELÖSCHT!

Fehler liegt wohl im Detail! Ich sah im Explorer wohl das Änderungsdatum. Das ist auch das Datum der Kamera.
Beim kopieren in einen Testordner wurde aber das Erstelldatum auf "eben vorhin" gesetzt... Blöd! Deshalb löschte auch die Batch wahrscheinlich nix!!!
Jetzt möchte ich aber das Skript nicht auf den Originalordner los lassen...
...geht das ganze auch auf "Änderungsdatum"?

Danke für die Bemühungen...
Member: colinardo
Solution colinardo Sep 03, 2014 updated at 13:41:31 (UTC)
Goto Top
Zitat von @mgrotjans:
...geht das ganze auch auf "Änderungsdatum"?
sicher:
gci 'd:\webcam\*.jpg' | ?{$_.LastWriteTime.Hour -ge 23 -or $_.LastWriteTime.Hour -lt 6} | remove-item -force
Member: mgrotjans
mgrotjans Sep 03, 2014 at 13:45:19 (UTC)
Goto Top
Hallo!
Habs im Originalordner laufen lassen!
Alles wunderbar!
Der Denkfehler war also die Kopie im Testordner!
Da gabs dann ein neues Erstelldatum/Zeit!

Ich danke Dir für die schnelle und geduldige Hilfe!
Habe eben das Script in allen 8 Cam-Ordnern laufen lassen.
Die "schwarzen"-Bilder sind nun alle weg!
Einige Gig an Speicher frei gemacht!

Prima! Meinen allerherzlichsten Dank!

Gruß, Markus
Member: thomask68
thomask68 Jan 10, 2018 at 10:14:56 (UTC)
Goto Top
Hallo Uwe,

VIELEN DANK für Deine Antwort!!!

Ich hänge mal ein Screenshot an. Links die Powershell, rechts der Ordner mit einigen Bildern. nach Ausführung sollten doch alle Bilder nach 17h gelöscht sein... Passiert aber nicht.

Bin leider Anfänger und wahrscheinlich ists ein blöder Syntax- oder Denkfehler.

Gruss
Thomas
screenshot_thomas_zeit
Member: colinardo
colinardo Jan 10, 2018 updated at 10:20:11 (UTC)
Goto Top
Das Datum was du dort eingeblendet hast ist das Änderungsdatum nicht das Erstelldatum!!
Wenn du das Änderungsdatum nutzen willst musst du in der Zeile statt $_.CreationTime.Hour $_.LastWriteTime.Hour nutzen!
ists ein blöder Syntax- oder Denkfehler.
So ist es.
Member: thomask68
thomask68 Jan 10, 2018 at 13:15:41 (UTC)
Goto Top
Ein Traum! Es klappt. In 20 Sekunden 42.000 Fotos gescannt und die Nachbilder gelöscht.
VIELEN DANK!!!
Member: colinardo
colinardo Jan 10, 2018 at 13:43:00 (UTC)
Goto Top
Keine Ursache, war zu erwarten face-wink.