.titleBar { margin-bottom: 5px!important; }

[Problem] Script zum Löschen von Videos geht nicht

Dieses Thema im Forum "Freetz" wurde erstellt von schumi20091, 31 Dez. 2018.

  1. schumi20091

    schumi20091 Neuer User

    Registriert seit:
    19 Mai 2009
    Beiträge:
    162
    Zustimmungen:
    4
    Punkte für Erfolge:
    18
    Hallo,
    ich habe an meiner FritzBox 7590 mit Freetz eine externe Festplatte, wo die Aufnhamen von den Überwachungskameras gespeichert werden. Ich habe es aktuell schon so hinbekommen, dass die Videos von einem Tag in den Passenden Datums Ordner verschoben werden. Jetzt möchte ich aber noch, dass die Videos bzw. Ordner mit dem Datumsnamen der älter als 30 Tage ist automatisch gelöscht werden! Das Skript wird über Crontab ausgeführt.
    So sieht es aktuell aus:
    #!/bin/sh
    # Ordner mit heutigem Datum erstellten
    mkdir /var/media/ftp/uStor01/01_Test/$(date +\%Y-\%m-\%d)
    # Warte Zeit
    sleep 59
    # Alle Dateien aus dem Ordner "Z_Heute" in den Ordner mit dem gerade erstellten (heutigem) Datum verschieben
    mv /var/media/ftp/uStor01/01_Test/Z_Heute/* /var/media/ftp/uStor01/01_Test/$(date +\%Y-\%m-\%d)
    # Warte Zeit
    sleep 120
    # Pfad wo sich die Ordner zum löschen befinden
    path= /var/media/ftp/uStor01/01_Test/
    # Ordner löschen, die Ãlter als 30 Tage sind
    find $path -maxdepth 1 -mtime +30 -type d -exec rm -rf {} ';'

    Warum geht das Löschen aktuell nicht?
    Wichtig ist das der Ordner "Z_Heute" nie gelöscht wird.
     
  2. stoney

    stoney Moderator
    Forum-Mitarbeiter

    Registriert seit:
    7 Okt. 2015
    Beiträge:
    4,042
    Zustimmungen:
    254
    Punkte für Erfolge:
    83
    Ort:
    Bayern
    #2 stoney, 1 Jan. 2019
    Zuletzt bearbeitet: 1 Jan. 2019
    Die erste sleep-time könnte mE raus.

    Wurde der Timestamp angepasst (beim testen) bzw ist der Ordner denn älter als die angegebenen 30 Tage?
    Code:
    [email protected]:~ $ mkdir /tmp/test
    [email protected]:~ $ ls -lh /tmp/
    insgesamt 4,0K
    drwxr-xr-x 2 pi pi 4,0K Jan  1 01:17 test
    [email protected]:~ $ touch -r /tmp/test/ -d "-31 days" /tmp/test/
    [email protected]:~ $ ls -lh /tmp/
    insgesamt 4,0K
    drwxr-xr-x 2 pi pi 4,0K Dez  1 01:17 test
    [email protected]:~ $ find /tmp/ -maxdepth 1 -mtime +30 -type d -exec rm -rf {} ';'
    [email protected]:~ $ ls -lh /tmp/
    insgesamt 0
    [email protected]:~ $
    
    Code:
    [email protected]:~ $ mkdir /tmp/test
    [email protected]:~ $ touch -r /tmp/test/ -d "-30 days" /tmp/test/
    [email protected]:~ $ ls -lh /tmp/
    insgesamt 4,0K
    drwxr-xr-x 2 pi pi 4,0K Dez  2 01:20 test
    [email protected]:~ $ find /tmp/ -maxdepth 1 -mtime +30 -type d -exec rm -rf {} ';'
    [email protected]:~ $ ls -lh /tmp/
    insgesamt 4,0K
    drwxr-xr-x 2 pi pi 4,0K Dez  2 01:20 test
    [email protected]:~ $

    In Deinem Fall wäre ein -mtime +29 das Richtige
     
    schumi20091 gefällt das.
  3. schumi20091

    schumi20091 Neuer User

    Registriert seit:
    19 Mai 2009
    Beiträge:
    162
    Zustimmungen:
    4
    Punkte für Erfolge:
    18
    #3 schumi20091, 1 Jan. 2019
    Zuletzt bearbeitet: 1 Jan. 2019
    Die erste sleep time ist drin, weil das Scritp um 23:59Uhr ausgeführt wird und so die Videos bis 23:59:59Uhr alle verschoben werden!

    Die Ordner haben alle als erstellungsdatum den Tag mit dem entsprechendem Datum!

    Würde der Ordner "Z_Heute" bei deinem Script nicht auch mit gelöscht werden?

    Ich habe es gerade mal per Telnet getestet bei der Eingabe von:
    touch -r /var/media/ftp/uStor01/01_Test/ -d "+29 days" /var/media/ftp/uStor01/01_Test/

    Erhalte ich diese Fehlermeldung:
    touch: invalid date '+29 days'

    Und bei der Eingabe von:
    find /var/media/ftp/uStor01/01_Test/ -maxdepth 1 -mtime +29 -type d -exec rm -rf {} ';'

    Passiert nichts...keine Fehlermeldung, es wird aber auch nichts gelöscht...
     
  4. PeterPawn

    PeterPawn IPPF-Urgestein

    Registriert seit:
    10 Mai 2006
    Beiträge:
    11,464
    Zustimmungen:
    602
    Punkte für Erfolge:
    113
    Beruf:
    IT-Freelancer
    Ort:
    Berlin
    #4 PeterPawn, 1 Jan. 2019
    Zuletzt bearbeitet: 1 Jan. 2019
    Du weißt aber schon, daß Du Dir mit einem "find" ohne die "exec"-Option auch einfach die "ausgewählten" Verzeichnisse anzeigen lassen könntest?

    Gerade beim Feintuning solcher Kommandos ist das sicherlich erst einmal der bessere Weg ... ansonsten kann es problemlos auf vorkommen, daß der Befehl mal genau gar nichts "Sichtbares" macht. Denn nur gefundene Verzeichnisse, die den Kriterien entsprechen, würden zum Aufruf des "rm" führen - gibt es keine Verzeichnisse, gibt es keinen Aufruf (mithin auch keine Fehlermeldungen) und auch keine irgendwie geartete Ausgabe auf STDOUT (oder STDERR).

    Der Versuch, das "touch" in der BusyBox mit einer Datumsangabe "+29 days" zu "füttern", erscheint mir - nur nebenbei - so gar nicht logisch. Bei einer Software. die eigentlich strikt auf geringst möglichen Platzbedarf getrimmt wird (wie das bei der BusyBox nun mal der Fall ist), wird kein vernünftiger Mensch solche "relativen" Angaben einbauen ... wie kommst Du darauf, daß Deine BusyBox (und ich wäre sehr verblüfft, wenn "touch" nicht ein Symlink auf ebendiese "/bin/busybox" sein sollte) das irgendwie anders handhaben könnte?

    EDIT:
    Außerdem kannst Du Dir ja mal diese Kommandos anschauen:
    Code:
    [email protected]:~ $ mkdir /var/test;touch -d "2018-12-01" /var/test/file;ls -l /var/test/file
    -rw-r--r--    1 root     root             0 Dec  1 19:55 /var/test/file
    [email protected]:~ $ find /var/test -mtime +31
    [email protected]:~ $ find /var/test -mtime 31
    /var/test/file
    [email protected]:~ $ find /var/test -mtime -31
    /var/test
    [email protected]:~ $ rm -r /var/test
    [email protected]:~ $
    
    und Dir überlegen, was da bei Dir wohl schiefgehen könnte.
     
    schumi20091 gefällt das.
  5. stoney

    stoney Moderator
    Forum-Mitarbeiter

    Registriert seit:
    7 Okt. 2015
    Beiträge:
    4,042
    Zustimmungen:
    254
    Punkte für Erfolge:
    83
    Ort:
    Bayern
    #5 stoney, 1 Jan. 2019
    Zuletzt bearbeitet: 1 Jan. 2019
    na wenns durchdacht ist ;)
    das von mir gezeigte ist ja kein Script, sondern eine manuelle Nachbildung Deiner "Aufgabe" incl manuellem ändern des Timestamps, um für das nachfolgende find /tmp/ -maxdepth 1 -mtime +29 -type d -exec rm -rf {} ';' erst mal die nötigen Vorraussetzungen zu schaffen - wie Du siehst arbeite ich da an einem BananaPi (ergänzend: auf Raspbian)


    Code:
    [email protected]:~ $
    $ mkdir -p /tmp/media/ftp/uStor01/01_Test/$(date +\%Y-\%m-\%d)
    $ mkdir -p /tmp/media/ftp/uStor01/01_Test/Z_Heute
    $ touch /tmp/media/ftp/uStor01/01_Test/Z_Heute/abc    ### um eine Datei zu haben welche in den date-variable-ordner verschoben werden kann, sonst wird dieser Ordner nicht angelegt, sollte aber auf der F!B ja schon vorhanden sein, lt Deiner Aussage
    $ mv /tmp/media/ftp/uStor01/01_Test/Z_Heute/* /tmp/media/ftp/uStor01/01_Test/$(date +\%Y-\%m-\%d)
    $ touch -r /tmp/media/ftp/uStor01/01_Test/2019-01-01/ -d "-30 days" /tmp/media/ftp/uStor01/01_Test/2019-01-01/     ### auch das musst Du nicht ausführen, da die Ordner ja den passenden Timestamp aufweisen sollten.
    $ ls -lh /tmp/media/ftp/uStor01/01_Test/
    insgesamt 8,0K
    drwxr-xr-x 2 pi pi 4,0K Dez  1 20:05 2019-01-01
    drwxr-xr-x 2 pi pi 4,0K Jan  1 20:05 Z_Heute
    $ find /tmp/media/ftp/uStor01/01_Test/ -maxdepth 1 -mtime +29 -type d -exec rm -rf {} ';'
    $ ls -lh /tmp/media/ftp/uStor01/01_Test/                            insgesamt 4,0K
    drwxr-xr-x 2 pi pi 4,0K Jan  1 20:05 Z_Heute
    $
    //

    zeig uns doch mal die Ausgabe von ls -lh /var/media/ftp/uStor01/01_Test/
     
    schumi20091 gefällt das.
  6. schumi20091

    schumi20091 Neuer User

    Registriert seit:
    19 Mai 2009
    Beiträge:
    162
    Zustimmungen:
    4
    Punkte für Erfolge:
    18
    #6 schumi20091, 2 Jan. 2019
    Zuletzt von einem Moderator bearbeitet: 2 Jan. 2019
    Die Ausgabe sieht so aus:
    Code:
    ls -lh /var/media/ftp/uStor01/01_Test/
    drwxrwxrwx    1 root     root       40.0K Dec  4 15:12 2018-12-01
    drwxrwxrwx    1 root     root        4.0K Dec  4 15:13 2018-12-02
    drwxrwxrwx    1 root     root       20.0K Dec  4 15:13 2018-12-03
    drwxrwxrwx    1 root     root       64.0K Dec  5 00:00 2018-12-04
    drwxrwxrwx    1 root     root       28.0K Dec  6 00:00 2018-12-05
    drwxrwxrwx    1 root     root       36.0K Dec  7 00:00 2018-12-06
    drwxrwxrwx    1 root     root           0 Dec  7 23:59 2018-12-07
    drwxrwxrwx    1 root     root       64.0K Dec  9 00:00 2018-12-08
    drwxrwxrwx    1 root     root           0 Dec 10 17:54 2018-12-09
    drwxrwxrwx    1 root     root       32.0K Dec 11 00:00 2018-12-10
    drwxrwxrwx    1 root     root       44.0K Dec 12 00:00 2018-12-11
    drwxrwxrwx    1 root     root       28.0K Dec 13 00:00 2018-12-12
    drwxrwxrwx    1 root     root           0 Dec 13 23:59 2018-12-13
    drwxrwxrwx    1 root     root       68.0K Dec 15 00:00 2018-12-14
    drwxrwxrwx    1 root     root       40.0K Dec 16 00:00 2018-12-15
    drwxrwxrwx    1 root     root       32.0K Dec 17 00:00 2018-12-16
    drwxrwxrwx    1 root     root       12.0K Dec 17 23:59 2018-12-17
    drwxrwxrwx    1 root     root           0 Dec 18 23:59 2018-12-18
    drwxrwxrwx    1 root     root       72.0K Dec 20 00:00 2018-12-19
    drwxrwxrwx    1 root     root       24.0K Dec 21 00:00 2018-12-20
    drwxrwxrwx    1 root     root           0 Dec 21 23:59 2018-12-21
    drwxrwxrwx    1 root     root       64.0K Dec 23 00:00 2018-12-22
    drwxrwxrwx    1 root     root       32.0K Dec 24 00:00 2018-12-23
    drwxrwxrwx    1 root     root       32.0K Dec 25 00:00 2018-12-24
    drwxrwxrwx    1 root     root       12.0K Dec 25 23:59 2018-12-25
    drwxrwxrwx    1 root     root        4.0K Dec 27 00:00 2018-12-26
    drwxrwxrwx    1 root     root       28.0K Dec 28 00:00 2018-12-27
    drwxrwxrwx    1 root     root           0 Dec 28 23:59 2018-12-28
    drwxrwxrwx    1 root     root       60.0K Dec 30 00:00 2018-12-29
    drwxrwxrwx    1 root     root           0 Dec 30 23:59 2018-12-30
    drwxrwxrwx    1 root     root           0 Dec 31 23:59 2018-12-31
    drwxrwxrwx    1 root     root           0 Jan  1 23:59 2019-01-01
    drwxrwxrwx    1 root     root      144.0K Jan  2 16:11 Z_Heute

    Falls das mit dem Z_Heute Ordner zu Problem führt, kann ich die Verzeichnisstruktur auch noch etwas anpassen!

    //edit by stoney: Im Spoiler Code-Tag zwecks Lesbarkeit gesetzt
     
  7. stoney

    stoney Moderator
    Forum-Mitarbeiter

    Registriert seit:
    7 Okt. 2015
    Beiträge:
    4,042
    Zustimmungen:
    254
    Punkte für Erfolge:
    83
    Ort:
    Bayern
    na passt doch, wenn wir davon aus gehen, das Z_Heute das Datum+Uhrzeit der Ausgang ist, wurde doch alles älter als 29 Tage, also ab dem 30. Tag, gelöscht - 03.12.2018 wäre der 30. Tag, also das jüngste Datum auf welches das Löschen angewand wird

    nein tut es nicht, wie Du ja selbst in der letzten Zeile sehen kannst, bekommt der Ordner immer das aktuelle Datum, falls dort rein geschrieben wurde.

    Code:
    $ ls -lh /tmp/media/ftp/uStor01/01_Test/                            insgesamt 32K
    drwxr-xr-x 2 pi pi 4,0K Dez  1 23:43 aaa
    drwxr-xr-x 2 pi pi 4,0K Dez  2 23:43 bbb
    drwxr-xr-x 2 pi pi 4,0K Dez  3 23:43 ccc
    drwxr-xr-x 2 pi pi 4,0K Okt  7 00:39 ddd
    drwxr-xr-x 2 pi pi 4,0K Okt  8 00:39 eee
    drwxr-xr-x 2 pi pi 4,0K Okt  9 00:39 fff
    drwxr-xr-x 2 pi pi 4,0K Okt 10 00:39 ggg
    drwxr-xr-x 2 pi pi 4,0K Jan  2 23:39 Z_Heute
    $ sudo find /tmp/media/ftp/uStor01/01_Test/ -maxdepth 1 -mtime +29 -type d -exec rm -rf {} ';'
    $ ls -lh /tmp/media/ftp/uStor01/01_Test/                            insgesamt 4,0K
    drwxr-xr-x 2 pi pi 4,0K Jan  2 23:39 Z_Heute
    
     
    schumi20091 gefällt das.
  8. schumi20091

    schumi20091 Neuer User

    Registriert seit:
    19 Mai 2009
    Beiträge:
    162
    Zustimmungen:
    4
    Punkte für Erfolge:
    18
    Also mit den Telnet eingaben findet er die Ordner, aber wie muss ich das jetzt im Script eingeben, damit er die Ordner findet und dann löscht?

    Sorry habe noch nicht so viel damit zutun gehabt...
     
  9. stoney

    stoney Moderator
    Forum-Mitarbeiter

    Registriert seit:
    7 Okt. 2015
    Beiträge:
    4,042
    Zustimmungen:
    254
    Punkte für Erfolge:
    83
    Ort:
    Bayern
    #9 stoney, 5 Jan. 2019
    Zuletzt bearbeitet: 5 Jan. 2019
    Versuch's mal mit
    Code:
    #!/bin/sh
    # Ordner mit heutigem Datum erstellten
    mkdir -p /tmp/media/ftp/uStor01/01_Test/$(date +\%Y-\%m-\%d) >/dev/null 2>&1
    # Ordner Z_Heute erstellen, falls nicht vorhanden
    mkdir -p /tmp/media/ftp/uStor01/01_Test/Z_Heute >/dev/null 2>&1
    # Warte Zeit
    sleep 59
    # Alle Dateien aus dem Ordner "Z_Heute" in den Ordner mit dem gerade erstellten (heutigem) Datum verschieben
    mv /var/media/ftp/uStor01/01_Test/Z_Heute/* /var/media/ftp/uStor01/01_Test/$(date +\%Y-\%m-\%d)
    # Warte Zeit
    sleep 120
    # Ordner löschen, die Ãlter als 30 Tage sind
    find /var/media/ftp/uStor01/01_Test/ -maxdepth 1 -mtime +29 -type d -exec rm -rf {} ';'
    
    #EOF
    erstelle aber sicherheitshalber vorher ein Backup von ../01_Test/

    [ >/dev/null 2>&1 ist optional, zum unterdrücken der Ausgabe, falls der Ordner schon vorhanden ist]

    // Soll Dein 'gefällt mir' zum Ausdruck bringen, dass das Script so funktioniert wie Du es Dir vorgestellt hast?
     
    schumi20091 gefällt das.
  10. schumi20091

    schumi20091 Neuer User

    Registriert seit:
    19 Mai 2009
    Beiträge:
    162
    Zustimmungen:
    4
    Punkte für Erfolge:
    18
    Das "gefällt mir" war estmal für deine Hilfe;)!

    So wie es aussieht geht es jetzt so wie ich es möchte, mache es jetzt für alle Ordner fertig und werde es erneut testen.

    Eine Kleinigkeit hätte cih noch, wenn es also funktioniert...ich würde gerne die Scripte auf eine andere Box packen und von dort aus auf den FTP der anderen Box mich einloggen und die Scripte ausführen. Wie müsste das aussehen?
    Das die Links angepasst werden müssen ist mir schon klar, aber wie muss ich es mit den Logindaten im Script reinschreiben?
     
  11. stoney

    stoney Moderator
    Forum-Mitarbeiter

    Registriert seit:
    7 Okt. 2015
    Beiträge:
    4,042
    Zustimmungen:
    254
    Punkte für Erfolge:
    83
    Ort:
    Bayern
    Du nanntest 'Telnet' - läuft das auf Deiner 7590 oder läuft ein andere Dienst, SIAB, Dropbear ect?
    (Ob das überhaupt geht weiß ich nicht [via ssh wäre ich mir ziemlich sicher) das "Script" sind ja nur Linux-Basics)
    Ein paar Infos wie Du Dir das vorgestellt hast, musst Du noch preisgeben, damit Dir jmd ggf eine passende Lösung in einen [CODE]Schnipsel[/CODE] zurecht macht, der da tiefer in der Materie steckt.
     
  12. schumi20091

    schumi20091 Neuer User

    Registriert seit:
    19 Mai 2009
    Beiträge:
    162
    Zustimmungen:
    4
    Punkte für Erfolge:
    18
    Es soll so aussehen:
    1. Box 7590 mit der Originalen FritzOS und einem NAS Server mit FTP Server
    2. FritzBox mit Freetz Telnet, Dropbear usw.

    Die Scripte sollen auf die 2. Box mit Freetz von dort aus soll sich in den FTP Server der 1.Box eingeloggt und das Script ausgeführt werden!

    Hatte mal was gefunden..vielleicht hilft es euch weiter:
    Code:
    hxxp://stratigery.com/scripting.ftp.html