mclonger
Goto Top

Daten in Ordner verschieben und nach x Tagen löschen lassen

Hallo an alle,
Ich habe ein "Problem" was ich niemals allein lösen kann da mir das Wissen dazu fehlt.

Und zwar. Ich habe drei Wlan Kameras die aller xSekunden ein Bild auf einer Hdd (ist an einer Fritzbox 7390 angeschlossen) hochladen.

Ist das möglich die Bilder in einen täglich neu angelegten Ordner zu verschieben und diese Bilder/Ordner nach 14Tagen wieder zu löschen?

Das sollte aber auf der Fritzbox selbständig laufen. Geht das überhaupt?


Vielen vielen Dank

fababa3fcfc3096a0cdd02dd47f8c937

Content-Key: 225914

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

Printed on: April 19, 2024 at 11:04 o'clock

Member: wiesi200
wiesi200 Jan 05, 2014 at 21:00:33 (UTC)
Goto Top
Hallo, bei der Fritzbox glaub ich nicht das die das kann.

Schau dir mal die Kamera an vielleicht kann die das selber
Member: mclonger
mclonger Jan 05, 2014 at 21:05:22 (UTC)
Goto Top
Sorry die Kamera kann nur Bilder machen und uploaden
Member: colinardo
colinardo Jan 06, 2014 updated at 00:06:51 (UTC)
Goto Top
Zitat von @mclonger:
Das sollte aber auf der Fritzbox selbständig laufen. Geht das überhaupt?
wenn, dann nur mit geflashter Freetz-Firmware (http://linuxundich.de/hardware/die-fritzbox-via-freetz-mit-zusatzlichen ..)
und einem Shell-Script gekoppelt mit einem CRON-Job
Ansonsten das ganze einem günstigen und stromsparenden RaspberryPI diese Aufgabe überlassen, der dann gleichzeitig noch genügend Power für weitere Aufgaben in deinem Netz übernehmen kann.

Grüße Uwe
Member: mclonger
mclonger Jan 06, 2014 at 07:22:10 (UTC)
Goto Top
ich habe noch etwas im Forum gelesen... und mit Robocopy kann ich sowas doch auch machen.
wie müsste da der befehl aussehen für: erstelle täglich einen ordner und verschiebe -> und Daten älter als zwei Wochen löschen?

mkdir H:\alte
robocopy.exe H:\KAMERA H:\taegliche /E /MOVE /MINAGE:14 /R:1 /W:1
rmdir H:\alte /s /q

so habe ich angefangen, aber wie geht's weiter?

Mfg Marcel
Member: wiesi200
wiesi200 Jan 06, 2014 at 07:55:21 (UTC)
Goto Top
Zitat von @mclonger:

ich habe noch etwas im Forum gelesen... und mit Robocopy kann ich sowas doch auch machen.
wie müsste da der befehl aussehen für: erstelle täglich einen ordner und verschiebe -> und Daten älter als
zwei Wochen löschen?

Ja schon, aber robocopy ist ein Windows Programm das kann die Fritzbox nicht ausführen.

Wenn's die Kammera nicht kann dann bleibt dir nur der weg von Colinardo
Member: colinardo
colinardo Jan 06, 2014 updated at 08:11:26 (UTC)
Goto Top
Das hatten wir hier schon gefühlt 1 Millionen mal.
Such hier mal im Forum nach Dateien älter als x Tage löschen
Dazu muss aber ein Rechner von dir laufen ...
Grüße Uwe
Member: mclonger
mclonger Jan 06, 2014 at 12:05:55 (UTC)
Goto Top
kann man das forefiles auch per robocopy starten?

mein Rechner (auf arbeit) ist den ganzen Tag an. mein Traffic auf Arbeit leidet durch solch Aktionen aber nicht sonderlich groß? Oder
Member: colinardo
colinardo Jan 06, 2014 updated at 17:26:22 (UTC)
Goto Top
Hier auf die schnelle ein Powershell-Script für dein Vorhaben. Es verschiebt alle Bilder die älter als Heute sind, jeweils in einen Unterordner mit den Tagesdatum des jeweiligen Bildes. Zum Schluss werden alle Ordner und Bilder die älter als 14 Tage sind entfernt
In Zeile 1 den Pfad zu den Bildern angeben (ohne Backslash am Ende)
$imageDir = "H:\KAMERA"  
$images = dir "$imageDir\*.jpg" | ?{$_.PSIsContainer -eq $false}  

foreach ($image in $images){
    if ($image.CreationTime -lt (get-date "00:00:00")){  
        $dateFolder ="$imageDir\$($image.CreationTime.ToShortDateString())"  
        if (!(test-path $dateFolder)) {mkdir $dateFolder | out-null}
        Move-Item -Path $image.FullName -Destination $dateFolder -Force
    }
}
dir "$imageDir\*" -Recurse | ?{$_.CreationTime -lt (get-date).AddDays(-14)} | Remove-Item  
Falls du noch nie ein Powershell-Script ausgeführt hast musst du die Execution-Policy noch auf deinem System entsprechend setzen:
Set-Executionpolicy RemoteSigned
Grüße Uwe
Member: wiesi200
wiesi200 Jan 06, 2014 at 16:24:11 (UTC)
Goto Top
also abklären solltest du das aber mit deinem Arbeitgeber.

Aber ehrlich gesagt du musst das doch nicht permanent einordnen lassen.
Einfach das Skript bei deinem privaten PC so hinterlegen das er einsortiert wenn du ihn einschaltet und gut ist.
Member: mclonger
mclonger Jan 06, 2014 updated at 16:49:44 (UTC)
Goto Top
also die Daten lade ich dann lieber zu hause wenn der Rechner mal an ist.

mfg Marcel
Member: colinardo
colinardo Jan 06, 2014 updated at 16:50:37 (UTC)
Goto Top
Zitat von @mclonger:
"Set-Executionpolicy RemoteSigned" gebe ich wohl einfach nur bei start -> auführen ein?
Nein, Powershell-Konsole mit Admin-Rechten öffnen und dort eingeben
das was colinardo geschrieben hat, wird so in robocopy eingefügt? ich stell mich vielleicht an face-smile
Wieder daneben, das gehört in eine Textdatei mit der Endung *.ps1.
Dein Google funktioniert noch bei dir ?? Etwas mitarbeiten und Hirn einschalten musst du schon...

danke für eure Geduld .
ich seh schon das wird wieder eine "never ending story"

Grüße Uwe
Member: mclonger
mclonger Jan 06, 2014 at 16:53:10 (UTC)
Goto Top
ok gefunden...
mein Laufwerk heisst Z was ich noch bei dir abgeändert habe.
es kommt aber ein fehler.


Get-ChildItem : Das Laufwerk wurde nicht gefunden. Ein Laufwerk mit dem Namen " H" ist nicht vorhanden.
Bei Zeile:9 Zeichen:14

back-to-top$images = dir <<<< "$imageDir\*.jpg" | ?{$_.PSIsContainer -eq $false}

+ CategoryInfo : ObjectNotFound: ( H:String) [Get-ChildItem], DriveNotFoundException
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

3
4
5
6
Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen.
Bei Zeile:29 Zeichen:38

back-to-top$image.CreationTime.ToShortDateString <<<< ()

+ CategoryInfo : InvalidOperation: (ToShortDateString:String) , RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

7
New-Item : Das Laufwerk wurde nicht gefunden. Ein Laufwerk mit dem Namen " H" ist nicht vorhanden.
Bei Zeile:38 Zeichen:24

back-to-top$scriptCmd = {& <<<< $wrappedCmd -Type Directory @psboundparameters }

+ CategoryInfo : ObjectNotFound: ( H:String) [New-Item], DriveNotFoundException
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.NewItemCommand

8
Move-Item : Das Argument kann nicht an den Parameter "Path" gebunden werden, da es NULL ist.
Bei Zeile:39 Zeichen:24

back-to-topMove-Item -Path <<<< $image.FullName -Destination $dateFolder -Force

+ CategoryInfo : InvalidData: (face-smile [Move-Item], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.MoveItemCommand

9
10
11
Get-ChildItem : Das Laufwerk wurde nicht gefunden. Ein Laufwerk mit dem Namen " H" ist nicht vorhanden.
Bei Zeile:54 Zeichen:4

back-to-topdir <<<< "$imageDir\*" -Recurse | ?{$_.CreationTime -lt (get-date).AddDays(-14)} | Remove-Item

+ CategoryInfo : ObjectNotFound: ( H:String) [Get-ChildItem], DriveNotFoundException
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Member: colinardo
colinardo Jan 06, 2014 at 16:55:44 (UTC)
Goto Top
dann hast du das Script in der Admin-Konsole ausgeführt, dort ist das Netzlaufwerk das von deinem User aus verbunden wurde nicht verfügbar ....mach es also in einer normalen User-Powershell-Konsole
Member: mclonger
mclonger Jan 06, 2014 at 17:09:09 (UTC)
Goto Top
ok habe es denk ich so gemacht.
aber ->

PS C:\> $imageDir = " Z:\KAMERA"
$images = dir "$imageDir\*.jpg" | ?{$_.PSIsContainer -eq $false}
foreach ($image in $images){
if ($image.CreationTime -lt (get-date "00:00:00")){
$dateFolder ="$imageDir\$($image.CreationTime.ToShortDateString())"
if (!(test-path $dateFolder)) {mkdir $dateFolder | out-null}
Move-Item -Path $image.FullName -Destination $dateFolder -Force
"$imageDir\*" -Recurse | ?{$_.CreationTime -lt (get-date).AddDays(-14)} | Remove-Item

Sie müssen auf der rechten Seite des Operators "-" einen Wertausdruck angeben.
At line:8 char:15

Unerwartetes Token "Recurse" im Ausdruck oder in der Anweisung.
At line:8 char:16

Ein leeres Pipeelement ist nicht zulässig.
At line:8 char:24

Fehlende schließende "}" im Anweisungsblock.
At line:9 char:1

Fehlende schließende "}" im Anweisungsblock.
At line:9 char:1
Member: colinardo
colinardo Jan 06, 2014 updated at 17:13:15 (UTC)
Goto Top
Zitat von @mclonger:
ok habe es denk ich so gemacht.
oh je, das geht natürlich nicht, kopiere das Script in eine Textdatei und gebe Ihr die Endung .ps1. Dann speicherst du das ganze und machst einen Rechtsklick auf das Script > Mit Powershell ausführen. Oder in einer Powershell-Konsole den Pfad zur PS1-Datei eingeben und Enter drücken ...
Member: mclonger
mclonger Jan 06, 2014 at 17:21:14 (UTC)
Goto Top
habe ich gemacht ->

PS C:\Users\Marcel> C:\Users\Marcel\Desktop\.ps1
Sie müssen auf der rechten Seite des Operators "-" einen Wertausdruck angeben.
Bei C:\Users\Marcel\Desktop\.ps1:8 Zeichen:16

back-to-top"$imageDir\*" - <<<< Recurse | ?{$_.CreationTime -lt (get-date).AddDays(-14)} | Remove-Item

+ CategoryInfo : ParserError: (face-smile , ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedValueExpression

bitte nicht verzweifeln
Member: colinardo
colinardo Jan 06, 2014 updated at 17:27:02 (UTC)
Goto Top
Zitat von @mclonger:

habe ich gemacht ->
hoffentlich hast du das Script über die Funktion "Quelltext" hier im Forum kopiert ...
oder dir ist da ein Leerzeichen reingerutscht > zwischen dem Bindestrich und Recurse, denn hier geht das Script einwandfrei, ich mach das ja nicht zum ersten mal Maestro ...
Member: mclonger
mclonger Jan 06, 2014 at 17:42:18 (UTC)
Goto Top
ja das habe ich über quelltext kopiert -> Editor -> speichern .ps1 -> öffnen im Powershell -> Script ausführen -> fehler
und kein Leerzeichen zw Bindestrich und recurse

PS C:\Users\Marcel> C:\Users\Marcel\Desktop\.ps1
Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen.
Bei C:\Users\Marcel\Desktop\.ps1:6 Zeichen:38

back-to-top$image.CreationTime.ToShortDateString <<<< ()

+ CategoryInfo : InvalidOperation: (ToShortDateString:String) , RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

Move-Item : Das Argument kann nicht an den Parameter "Path" gebunden werden, da es NULL ist.
Bei C:\Users\Marcel\Desktop\.ps1:8 Zeichen:24

back-to-topMove-Item -Path <<<< $image.FullName -Destination $dateFolder -Force

+ CategoryInfo : InvalidData: (face-smile [Move-Item], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.MoveItemCommand
Member: colinardo
colinardo Jan 06, 2014 at 17:45:34 (UTC)
Goto Top
Zitat von @mclonger:

ja das habe ich über quelltext kopiert -> Editor -> speichern .ps1 -> öffnen im Powershell -> Script
ausführen -> fehler
und kein Leerzeichen zw Bindestrich und recurse
ahh wahrscheinlich hast du noch Powershell 2.0 oder kleiner muss das damit gerade mal testen, hab das hier mit PS 3.0 getestet.
Member: mclonger
mclonger Jan 06, 2014 at 17:50:39 (UTC)
Goto Top
ja du hast recht, ich habe die 2.0
Member: colinardo
colinardo Jan 06, 2014 updated at 17:57:30 (UTC)
Goto Top
Zitat von @mclonger:
ja du hast recht, ich habe die 2.0
hier geht es einwandfrei auch unter PS 2.0 du musst noch irgendwas falsch machen, was ich jetzt nicht sehen kann. Hoffentlich hast du keinen Backslash am Ende des Pfades angegeben ...
Member: mclonger
mclonger Jan 06, 2014 at 18:01:54 (UTC)
Goto Top
mist ... ich weiss nicht weiter. kann evtl sowas über teamviewer machen?
Member: colinardo
colinardo Jan 06, 2014 at 18:03:06 (UTC)
Goto Top
Zitat von @mclonger:

mist ... ich weiss nicht weiter. kann evtl sowas über teamviewer machen?
schick die ID und PW mit einer Personal Message hier im Forum ...
Member: AnkhMorpork
AnkhMorpork Jan 07, 2014 at 07:13:33 (UTC)
Goto Top
Zitat von @mclonger:

habe ich gemacht ->

PS C:\Users\Marcel> C:\Users\Marcel\Desktop\.ps1

Hallo,
mal ne Zwischenfrage zum Verständnis: Rufst du das Script wirklich so auf? Ich meine, wo ist der Dateiname des Scripts?
Oder verstehe ich das falsch?

Gruß

ANKH
Member: colinardo
colinardo Jan 07, 2014 at 07:45:14 (UTC)
Goto Top
Zitat von @AnkhMorpork:

> Zitat von @mclonger:
>
> habe ich gemacht ->
>
> PS C:\Users\Marcel> C:\Users\Marcel\Desktop\.ps1

Hallo,
mal ne Zwischenfrage zum Verständnis: Rufst du das Script wirklich so auf? Ich meine, wo ist der Dateiname des Scripts?
Oder verstehe ich das falsch?

Gruß

ANKH
hat sich inzwischen geklärt, die ExecutionPolicy war noch nicht richtig für den aktuellen User gesetzt ...
Member: mclonger
mclonger Jan 07, 2014 at 16:16:18 (UTC)
Goto Top
ich habe es nun mal laufen lassen, aber ich muss für jeden unterordner ein extra script schreiben?
und wenn das beendet ist bleibt immer dieses Taskfenster offen

mfg
Member: colinardo
colinardo Jan 07, 2014 updated at 16:20:19 (UTC)
Goto Top
Zitat von @mclonger:

ich habe es nun mal laufen lassen, aber ich muss für jeden unterordner ein extra script schreiben?
und wenn das beendet ist bleibt immer dieses Taskfenster offen
nö ich habe dir doch gestern die erweiterte Variante geschickt die alle Ordner in der Ebene Z:\KAMERA automatisch durchläuft... deine Fritte ist zu langsam für die Menge an Files deswegen sieht das so aus als würde es in einem loop laufen ...
Member: mclonger
mclonger Jan 07, 2014 at 16:22:52 (UTC)
Goto Top
? wo ? bin ich blind?
Member: colinardo
colinardo Jan 07, 2014 updated at 16:24:15 (UTC)
Goto Top
Zitat von @mclonger:

? wo ? bin ich blind?
schau mal in deine personal messages hier im Forum !