Script zum Löschen v. Dateien - Easy! ... oder doch nicht?

  • Hallo zuammen!


    Für meine Braut nehme ich von Mo - Fr per Autotimer eine Sendung auf. Funktioniert einwandfrei. Die Dateien liegen zusammen mit anderen Filmen im Verzeichnis /media/hdc1/movie/ und sehen so aus:


    20100105 1825 - Das Erste - Marienhof.ts
    20100105 1825 - Das Erste - Marienhof.ts.ap
    20100105 1825 - Das Erste - Marienhof.ts.cuts
    20100105 1825 - Das Erste - Marienhof.ts.meta
    20100105 1825 - Das Erste - Marienhof.ts.sc
    20100107 1825 - Das Erste - Marienhof.ts
    20100107 1825 - Das Erste - Marienhof.eit
    20100107 1825 - Das Erste - Marienhof.ts.ap
    20100107 1825 - Das Erste - Marienhof.ts.cuts
    20100107 1825 - Das Erste - Marienhof.ts.meta
    20100107 1825 - Das Erste - Marienhof.ts.sc
    20100108 1825 - Das Erste - Marienhof.ts
    ....


    Damit ich den ganzen Schwachsinn nicht manuell löschen muss, wollte ich ein Script haben, welches ich per Cronjob aufrufen möchte.


    Also mal ab zu einem bekannten Linux-Spezi. Von dem bekam ich die folgende Kommandozeile:


    Zitat

    find *suchmuster* -mtime +22 -type f -exec rm -rf {} \;


    Funktionierte nicht. Es stellte sich heraus, dass das Linux auf der Box kein Bash kann.



    Ab in die Ihad-Shoutbox. Dort bekam ich die folgende Kommandozeile:


    Zitat

    find /media/hdc1/movie -name "*Marienhof*" -type f -mtime +22 | xargs rm -rf


    Der Befehl wird ohne Fehler ausgeführt, aber die Dateien werden nicht gelöscht!?
    Mit find /media/hdc1/movie -name "*Marienhof*" -type f -mtime +22 werden die Dateien übrigens einwandfrei gefunden.



    Mit dieser Erkenntnis wieder ab zum Linux-Spezi. Folgendes Script hat er mir mitgegeben:


    Zitat

    #!/bin/sh
    find /media/hdc1/movie/*Marienhof* -mtime +22 -type f > /tmp/del.tmp
    rm "`cat /tmp/del.tmp`"


    Ergebnis: rm: cannot remove /media/hdc........................:No such file or directory
    btw.: Die Datei del.tmp wird angelegt und die Dateinamen + Pfade stehen drin.



    So was soll ich sagen - Jetzt probier' ich es hier im Forum. Hier werden ja gröbere Scripte geschrieben. Es sollte wohl möglich sein ein paar Dateien zu Löschen!?
    Kann mir jemand helfen?



    Vielen Dank,



    Zusatzinfos:
    DM8000
    Gemini 4.6

  • wie wärs denn mit


    rm -rf *Marienhof*


    ... damit wird alles gelöscht was Marienhof im Dateinamen hat.

    Es genügt nicht, unfähig zu sein, man muss auch in die Politik gehen.

  • Hallo,


    Zitat

    wie wärs denn mit


    rm -rf *Marienhof*


    ... damit wird alles gelöscht was Marienhof im Dateinamen hat.


    Mein Fehler - Ich vergaß zu erwähnen, dass nur Dateien einen bestimmten Alters gelöscht werden sollen.
    Darum auch das -mtime +xx in den oben genannten Beispielen...
    Also z.B. Aufnahmen die Älter als eine Woche sind o.ä.


    Vielleicht noch jemand eine Idee?

  • Probiers mal damit
    Syntax: time_rm {Teil des filenamen} {Alter in Tagen vor dem gelöscht werden soll -1}
    Bsp. time_rm Marienhof 20
    Alles was "Marienhof" im Namen hat und älter als 21 Tage ist wird gelöscht.




    Gebe keine Gewähr für gelöschte Files (bei mir hats auf meiner Linuxfirewall funktioniert), deshalb bitte die Pfade prüfen und vorher testen :winking_face:

  • oder evtl auch so:


    Code
    for i in `find /media/hdc1/movie/*Marienhof* -mtime +22 -type f` ; do rm "$i"; done


    zum testen aus dem rm ein echo machen
    oder mit kopien testen



    Gruss
    Dirk

    Es gibt keine Wahrheit, nur Informationen.
    Aus verschiedenen Köpfen, in verschiedenen Versionen
    -----------------Schwarzmarkt Funkhop Combo--------------------

  • Hallo zusammen!


    Danke ihr beiden für eure Zeit und eure Mühe.


    Boronsbruder:


    Hat leider nicht geklappt. Hier das Ergebnis:
    http://www.fotos-hochladen.net/boronc862btin.jpg


    Wie man im Screenshot sieht, habe ich das Verzeichnis auf .../test abgeändert. Die Dateien waren in dem Verzeichnis und wurden mit find gefunden...



    schrotty:


    Hier zuerst die Ausgabe mit echo:
    http://www.fotos-hochladen.net/schrotty1tdgqvhsm.jpg


    Jetzt mit rm:
    http://www.fotos-hochladen.net/schrotty25kftr149.jpg


    Leider auch nicht.
    Wie schon mein Kollege sagte, sind die Leerzeichen im Dateinamen wohl das Problem!?


    Wär schön, wenn die obenstehenden Screens euch helfen und vielleicht doch noch jemand eine Idee hat...


    Danke,

  • Probier mal das

    Code
    find /media/hda1/movie -name "*Marienhof*" -type f | sed 's/^/ls -1 "/; s/$/"/' | sh


    Wenn es funktioniert "ls -1" durch "rm" ersetzen und natürlich auch den find-Befehl anpassen.


  • Jaja die Leerzeichen
    dachte schon die hätt ich diesmal nich vergessen.



    Zitat


    for i in "$(find /media/hdc1/movie/*Marienhof* -mtime +22 -type f)" ; do echo "$i" ; done


    edit:
    wenns jetzt zeilenweise kommt , kannst ausm echo ein rm machen.

    Es gibt keine Wahrheit, nur Informationen.
    Aus verschiedenen Köpfen, in verschiedenen Versionen
    -----------------Schwarzmarkt Funkhop Combo--------------------

    Einmal editiert, zuletzt von schrotty ()

  • Hello again!


    Vielen Dank an ALLE, die hier gepostet habe.
    Ich hätte nicht gedacht, dass ich überhaupt Resonanz bekommen werde!



    Kurz vorweg... - Wir haben einen Gewinner! :winking_face:


    Der erste Platz geht an:


    :pokal: - apostrophe


    Hier die leicht modifizierte Sieger-Line (+mtime hat noch gefehlt):


    Zitat

    find /media/hdc1/movie -name "*Marienhof*" -mtime +XX -type f | sed 's/^/rm "/; s/$/"/' | sh


    Ergebnis:
    http://www.fotos-hochladen.net/apostrophe1haejr7l.jpg



    :dasnemma: :danke: :laola: :369:


    Bis zum " | " versteh' ich es auch als Linux- und Programmier-anti. Der Rest hinter dem sed ... :bahnhof:



    Die anderen Commands habe ich auch noch ausprobiert:



    Peq:
    http://www.fotos-hochladen.net/peq41k6pvtc.jpg


    Schrotty:
    http://www.fotos-hochladen.net/schrottyp8ac25jw.jpg


    So jetzt werd' ich mich mal mit dem Cron beschäftigen...


    Ciao, :499:

  • Zitat

    Original von WotanAT
    Bis zum " | " versteh' ich es auch als Linux- und Programmier-anti. Der Rest hinter dem sed ... :bahnhof:


    Mit 's/^/rm "/ ' wird jeder Zeile in der Pipe ein rm " vorangestellt und 's/$/"/' setzt am Zeilenende ein ". Mit | sh wird die geänderte Pipe zum Ausführen weitergereicht. Habe ich mal irgendwo gelesen und es mir aufgeschrieben, sonst hätte ich es auch nicht gewusst;)

  • Guten Morgen :winking_face:
    Ja, bei mir waren keine Leerzeichen im Filenamen...
    Aber freut mich, dass ne Lösung gefunden wurde. Die Arbeit war ja nich ganz uneigennützig :winking_face:
    Dann werde ich mal die Lösung in mein Skript einbauen, da ich es einfacher finde ein Skript mit 2 Parametern über den Cronjob aufzurufen.


    Grats an apostrophe zum Sieg :369:
    Leider hats bei mir wieder nur zu nem 2. oder 3. Platz gereicht :)

  • Oh, wenn ich gewusst hätte dass man was gewinnen kann, hätt ich mir mehr Mühe gegeben. :face_with_rolling_eyes:
    Glückwunsch an den Gewinner. :tongue:
    bei mir hats funktioniert, auch mit Leerzeichen.
    Schön dass du eine Lösung hast, es führen ja viele Wege nach Rom.


    Gruss
    Dirk

    Es gibt keine Wahrheit, nur Informationen.
    Aus verschiedenen Köpfen, in verschiedenen Versionen
    -----------------Schwarzmarkt Funkhop Combo--------------------