1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Folder überwachen per Script

Dieses Thema im Forum "Unix & Terminal" wurde erstellt von Daisy, 21.01.06.

  1. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    14.01.06
    Beiträge:
    366
    für alle, die's interessiert - dies ist eine Fortführung meines ursprünglich im AppleScript-forum gestarteten Threads - hier:
    http://www.apfeltalk.de/forum/folder-actions-abfrageintervall-t29214.html

    Nun zu meinem Problem:

    Ich möchte mit einem Shellscript einen Folder überwachen (nachschauen ob's neue Files gibt - so ähnlich wie die 'Folder Actions' in AppleScript), in dem laufend Downloads (Gnutella/Limewire) ankommen. Dummerweise kann man aber wohl mit den Standard-Unix-Tools nicht auf das Creation Date der Files zugreifen, sondern nur auf das Modification Date. Wenn ich also in Intervallen die Modification Date der Files mit dem Zeitpunkt des letzten Intervalls abgleiche, kann das schiefgehen, denn das Modification Date ändert sich ja während des Downloads andauernd - dadurch könnte ein File dann mehrmals als neu gemeldet werden, wenn es langsam lädt oder das Intervall zu kurz ist..
    Ich müsste mir also entweder immer eine Liste mit allen Files anlegen und das dann später mit dem aktuellen Stand abgleichen (könnte problematisch sein, da sich manchmal sehr viele Dateien in dem Folder befinden) - oder mit 'GetFileInfo -d ...' aus den DevTools arbeiten? Oder gibt's da eine bessere und elegantere Lösung (hoffentlich)?

    Vielen Dank für Eure Hilfe :)

    Daisy
     
  2. mullzk

    mullzk Linsenhofener Sämling

    Dabei seit:
    04.01.04
    Beiträge:
    2.529
    ametzelchen gefällt das.
  3. pi26

    pi26 Adams Parmäne

    Dabei seit:
    17.12.04
    Beiträge:
    1.297
    Ich sehe einfach nicht warum das pur mit AS ein Problem sein sollte, wenn


    1. In Perioden der ganze Inhalt des Ordners abgefragt wird
    2. Jeweils ein File auf Unbusy überprüft wird (wenn öffnen scheitert)
    3. Das Fertige File in einen anderen Ordner verschoben wird

    --konzeptionell (ungeprüft)
    on idle
    tell application "Finder"
    set flist to every file of folder "Mac HD01:xy"
    repeat with f in flist
    --hier versuchen das file zu öffnen, bei misserfolg (offen) ignorieren
    move f to folder "Mac HD01:xy_fertig"
    end repeat
    end tell
    return 5 -- in 5 sec wieder
    end idle

    mfg pi26
     
  4. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    14.01.06
    Beiträge:
    366
    Hallo mullzk & pi26,

    vielen Dank für eure Tipps :).

    Die Idee mit lauchd (kannte ich noch nicht - ich lese mich mal ein ...) - ist sicher brilliant, scheitert aber daran, dass auf dem Rechner, auf dem es laufen soll, momentan noch ein älteres Kätzchen schnurrt. Vielleicht sollte ich den auf Tiger updaten? Ich denke darüber nach ...

    Das ganze in AS? Klar dass das geht - aber zwei Dinge stören mich an dem Plan: Erstens würde es mir besser gefallen, wenn der Prozess ganz im Hintergrund läuft - also auch ohne Icon im Dock - und das geht halt nun mal nicht mit AS. Und zweitens habe ich manchmal sehr viele (bis über 1000) Files in dem Folder. Da alle einzeln in einer Scriptschleife abzuarbeiten wäre mir zu aufwändig - dat dauert und kostet Prozessorleistung ... Meine Idee war daher, auf Shellbefehle zurückzugreifen, die mir dann nur eine Liste der neuen Files ausspucken. Ausserdem (sorry, das hatte ich nicht geschrieben) - möchte ich die Files schon während des Downloadvorgangs gemeldet haben und nicht erst wenn sie fertig sind - daher geht das mit dem '--hier versuchen das file zu öffnen, bei misserfolg (offen) ignorieren' leider nicht.
    Ich galube aber, ich hatte heute morgen eine Erleuchtung und doch einen Weg gefunden, wie ich mit dem 'Modification Date' zurecht komme - ich melde mich wieder und werde Bericht erstatten.

    Vielen Dank noch mal für Eure Hilfe :)

    Grüße

    Daisy
     
  5. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.903
    Du denkst zu umständlich.
    Solange eine Datei heruntergeladen wird, ist sie von einem anderen Prozess geöffnet.

    Darüber weiss 'lsof' Bescheid.

    Groschen gefallen?
     
  6. atl

    atl Niederhelfenschwiler Beeriapfel

    Dabei seit:
    04.11.04
    Beiträge:
    842
    Genau. Hier eine Empfehlung, wie ich vorgehen würde:
    Code:
    setze TIMESTAMP=0
    while (true) do {
        FILES=finde in zu überwachenden Ordner alle Dateien jünger als TIMESTAMP
        Setze TIMESTAMP auf aktuelle Zeit
        Für alle Dateien in FILES {
            Wenn (test ob Datei geöffnet (mittels lsof) != TRUE) dann
                tue, was du willst mit der Datei
        }
        Warte eine Zeit x
    } done
    All das funktioniert in der Bash mittels Shell-Scripting unter Verwendung der (externen) Befehle find, lsof, sleep und date. :)

    ByE...
     
  7. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    14.01.06
    Beiträge:
    366
    Hallo Rastafari & atl,

    lsof ist kein schlechter Gedanke - aber lsof fände ja alle Dateien, die LimeWire offen hat - also auch alle, die sich evtl. inaktiv in der Queue befinden - das können auch schon mal viele sein. Wie bereits geschrieben - ich hatte da eine Erleuchtung und die sieht so aus (Skript funktioniert und läuft schon):

    Da ich weiss, dass Limewire maximal 8 Files gleichzeitig lädt (mehr stelle ich da nie ein - ich könnte den exakten Wert aber sicher auch noch irgendwie aus einer Preferenz-Datei auslesen, denke ich ...) mache ich einfach:

    ls -tvw ...

    und schneide mit mit 'head' die 9 obersten (=neuesten) ab:

    ... | head -n9

    Dann habe ich die 8 zuletzt von LimeWire bearbeiteten Files (die neunte ist 'downloads.dat')
    Bei nur 8 Files ist es dann kein Problem, nachzuschauen, ob sie bereits bearbeitet wurden, ob sie schon größer als 0 Bytes sind, sie den richtigen Dateityp haben etc. ...

    Vielen Dank noch mal Euch allen für Eure Hilfe :)

    Daisy
     
  8. stk

    stk Grünapfel

    Dabei seit:
    05.01.04
    Beiträge:
    7.141
    Moin,

    Apropos launchd - bin die Tage über Lingon - einer GUI für launchd gestolpert.

    Für die Pre-Tigers gibt es mit CronniX ein Pendant für die crontab.

    Gruß Stefan
     

Diese Seite empfehlen