[GastForen Programmierung/Entwicklung AppleScript komplexe kopierfunktion

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

komplexe kopierfunktion

Anonym
Beiträge gesamt: 22827

4. Apr 2008, 18:21
Beitrag # 31 von 45
Beitrag ID: #422330
Bewertung:
(3019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi zusammen
@TMA: Danke für dein Angebot, es auch auf die Website zu stellen. Nutzt Du diesen Handler im Zusammenhang mit Folder-Actions?
@-hans-: Ich habe vergessen zu sagen, dass du die Script-Application als Stay-Open-Script, also mit der Option "Nicht automatisch beenden" sichern musst (war ja schon spät :smirk: ). Aus deinen Code-Fetzen ("ich mach es immer so") werde ich nicht schlau. Ich dachte, es geht um das Problem, das unfertig übertragene Dateien von Folder-Actions auf Server-Volumes zu früh angepackt werden, besonders, wenn diese von einem anderen Rechner angelegt werden!?
Genau das versuche ich mit dem geposteten Script zu verhindern (als Ersatz für Folder-Actions). Der FILEACTION-Handler in dem Script muss dann an markierter Stelle noch mit Leben gefüllt werden und die Einzelaktion erhalten, die auf die einzelnen Files (variable "d", als alias) angewendet werden soll. Danach werden die Dateien dann in den Target-Folder verschoben (wenn Du keine weitere Aktion hinzufügst, ist dies das einzige, was passiert, aber für einen ersten Test reichts). Am besten kann man das Script mit grossen Dateien testen, die mal ein Weilchen brauchen, bis sie übertragen sind.


als Antwort auf: [#422300]
X

komplexe kopierfunktion

Anonym
Beiträge gesamt: 22827

4. Apr 2008, 23:06
Beitrag # 32 von 45
Beitrag ID: #422331
Bewertung:
(3020 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo holgi,

ich habe dein script jetzt fuer uns angepasst und werde es wenn moeglich am sonntag unter realistischen bedingungen mal testen.
lokal laeuft es sehr gut und absolut zuverlaessig. getestet mit 12 gleichzeitig laufenden deiner scripts und einzeldateien bis zu 700 mb.
was meinst du wieviele deiner scripts auf einem rechner dualcore 2G gleichzeitig laufen koennen?

frage: wenn ich die property pfade z.t. direkt engeben will (backup und web sind immer gleich), wie muss genau die syntax sein? mein script:
Code
set folderPath to (choose folder) as Unicode text 
set unix to quoted form of POSIX path of folderPath

display dialog "Ordnerpfad" default answer unix


spuckt mir sowas aus: '/Users/hans/Desktop/April/'
ist das so richtig?

gute nacht :)

stand heute:
Code
property hotFolder : "" 
property targetFolder : ""
property backupFolder : ""
property webFolder : ""

property delayCheck : 10

-- <<<< IF NOT DEFINED YET, CHOOSE HOTFOLDER & TARGETFOLDER >>>>
on run
    if hotFolder = "" then
        set hotFolder to choose folder with prompt "Bitte wählen: Hot-Folder:"
        if targetFolder = "" then
            set targetFolder to choose folder with prompt "Bitte wählen:Target-Folder:"
            if backupFolder = "" then
                set backupFolder to choose folder with prompt "Bitte wählen:Backup-Folder:"
                if webFolder = "" then
                    set webFolder to choose folder with prompt "Bitte wählen: Web-Folder:"
                end if
            end if
        end if
    else
        display dialog ¬
            "• HOTFOLDER: " & return & (POSIX path of hotFolder as text) & return & return & ¬
            "• TARGETFOLDER: " & return & (POSIX path of targetFolder as text) & return & return & ¬
            "• backupFolder: " & return & (POSIX path of backupFolder as text) & return & return & ¬
            "• webFolder: " & return & (POSIX path of webFolder as text)
       
    end if
end run

-- <<<< CHECK FOR NEW FILES IN HOTFOLDER EVERY __ SECONDS >>>>
on idle
    if hotFolder is not "" then
        say "check"
        set FILELIST to list files of hotFolder
        if length of FILELIST > 0 then
            repeat with i from 1 to length of FILELIST
                FILEACTION(item i of FILELIST as alias)
            end repeat
        end if
        return delayCheck -- check-interval in seconds
    else
        quit me
    end if
end idle

-- <<<< REACTION, IF USER TRY TO QUIT THIS SCRIPT-APPLICATION >>>>
on quit
    activate
    display dialog "Really Quit The Hotfolder-Action?" buttons {"Cancel", "Quit Hotfolder"} default button "Cancel"
    if button returned of result = "Quit Hotfolder" then
        -- place things here to perform them before completion of this script
        continue quit
    end if
end quit

-- <<<< PROCESS AN MOVE THE FILE, IF COMPLETLY TRANSFERED >>>>
on FILEACTION(d)
   
   
    set size1 to (size of (info for d))
    if (size1 > 0) then
        delay 5
        set size2 to (size of (info for d))
        if (size1 = size2) then
            if (d as string) contains "an_" then
                justDistribute(d)
            else
                if (d as string) contains "az_" then
                    justDistribute(d)
                else
                    if (d as string) contains "re_" then
                        justDistribute(d)
                    else
                        set AppleScript's text item delimiters to ":"
                        set filePath to d as Unicode text
                        set baseName1 to text 1 thru 2 of (text item -3 of filePath)
                        set baseName2 to text item -2 of filePath
                       
                        set oldName to text item -1 of filePath
                       
                        set AppleScript's text item delimiters to "."
                        if (count of text items of oldName) is greater than 1 then
                            set baseName3 to text items 1 thru -2 of oldName
                            set curSuff to "." & (text item -1 of oldName)
                        else
                            set baseName3 to oldName
                            set curSuff to ""
                        end if
                        set newName to baseName1 & "_" & baseName2 & "_" & baseName3
                        if (count of newName) is greater than 27 then
                            set newName to (text 1 thru 27 of newName) & curSuff
                        else
                            set newName to newName & curSuff
                        end if
                        tell application "Finder" to duplicate file d to folder backupFolder with replacing
                        tell application "Finder" to set name of file oldName of folder backupFolder to newName
                        tell application "Finder" to duplicate file d to folder webFolder with replacing
                        tell application "Finder" to set name of file oldName of folder webFolder to newName
                       
                        tell application "Finder" to move file d to folder targetFolder with replacing
                        tell application "Finder" to set name of file oldName of folder targetFolder to newName
                       
                       
                    end if
                end if
            end if
           
        end if
    end if
end FILEACTION

on justDistribute(d)
    tell application "Finder" to duplicate d to webFolder with replacing
    tell application "Finder" to duplicate d to backupFolder with replacing
    tell application "Finder" to move d to targetFolder with replacing
end justDistribute



als Antwort auf: [#422300]

komplexe kopierfunktion

Anonym
Beiträge gesamt: 22827

5. Apr 2008, 08:18
Beitrag # 33 von 45
Beitrag ID: #422332
Bewertung:
(3019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hi, -hans-
Die Pfade musst du als alias übergeben. Also z.B.:
property hotFolder : ((path to "desk") & "April:" as text) as alias
Hatte Dir ja schon erzählt, wie ich es mit den Pfaden in Scripts halte. So lang als möglich mit Alias arbeiten, und erst wenn ich einen Dialog ausgeben will, in Text wandeln, und erst wenn ich in die Shell gehe, dort unmittelbar "quoted form of posix path"  anwenden.
Dann kannst Du Dir solche "as Unicode text"-Konstrukte etc. sparen, und das Ergebnis ist immer zuverlässig und berechenbar.
Ausserdem liesse sich z.B. ein Dateiname mit name of (info for aliasVariable) abgreifen, ohne den Finder zu bemühen oder mit Text item delimiters arbeiten zu müssen...

Gruß, H =:o) L G I


als Antwort auf: [#422300]

komplexe kopierfunktion

Anonym
Beiträge gesamt: 22827

6. Apr 2008, 22:01
Beitrag # 34 von 45
Beitrag ID: #422333
Bewertung:
(3019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo H =:o) L G I,

ich habe heute 3 eingangsordner durch dein script abarbeiten lassen. ca. 120 dateien. funktionierte sehr gut!

leider wollen alle macs in der firma (10.52 + 10.4irgendwas) diese codezeile nicht schlucken:
Code
        set FILELIST to list files of hotFolder 


beim ersten starten des programms war beim code "list files" durch <<eventSATIisfl>> ersetzt und wenn ich wieder "list files" statt dessen einsetzte, dann kam beim ausführen die meldung can't get every file¿

es funktioniert nur wenn ich sie auf:
Code
        tell application "Finder" to set FILELIST to hotFolder's files 

abändere. das hat aber zur folge, dass die files in den unterordner nicht mehr abgearbeitet werden ... sondern nur noch die dateien im hotfolder selber ...

gerade dieses feature war aber sehr praktisch.
weisst du vllt. rat¿


als Antwort auf: [#422300]

komplexe kopierfunktion

TMA
Beiträge gesamt: 399

7. Apr 2008, 05:28
Beitrag # 35 von 45
Beitrag ID: #422334
Bewertung:
(3019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi H =:o) L G I,
Zitat von author="H =:o) L G I" @TMA: Danke für dein Angebot, es auch auf die Website zu stellen. Nutzt Du diesen Handler im Zusammenhang mit Folder-Actions?


Folder-Actions benutze ich nicht.
Den Handler setze ich für alle möglichen Kopieraktionen ein. Größter Vorteil beim kopieren über die shell für mich ist das gleichzeitige umbenennen von Dateien.

Gruß
TMA


als Antwort auf: [#422300]

komplexe kopierfunktion

Anonym
Beiträge gesamt: 22827

7. Apr 2008, 16:54
Beitrag # 36 von 45
Beitrag ID: #422335
Bewertung:
(3019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
@-hans-: Freut mich, zu hören, dass es funktioniert. Sorry, «eventSATIisfl» deutet darauf hin, dass es die SATIMAGE-OSAX benötigt, das war mir grad selbst gar nicht so bewusst. Wenn Du die auf den Rechnern in der 4ma installierst, sollte es auch dort klappen.

@TMA: Jo, okay. Und die regulären Ausdrück nicht zu vergessen.

Und  wo wir grad beim Thema shell-Aktionen im Dateisystem sind. Vielleicht weiss das jemand hier im Forum: Wirkt es sich auf einem Helios-Server nachteilig auf die Desktop-Dateien aus, wenn man Dateisystem-Aktionen über die shell von einem Mac aus macht?
Problem könnten die versteckten .rsrc-Dateien, die für jedes File existent sind (Resources etc.), sein.
Es gibt von Helios ja direkt Ersatzbefehle (Desktop-Tools) für die Shell-Befehle wie "mv" "cp" usw. die dann "dt cp" oder "dt cp" lauten. Oder sind die nur nötig, wenn man auf dem Server selbst per shell agiert?? Werden die .rsrc mitgeändert, wenn die shell-befehle auf einem Mac laufen und Helios  dazwischen-hängt?


als Antwort auf: [#422300]

komplexe kopierfunktion

TMA
Beiträge gesamt: 399

8. Apr 2008, 05:41
Beitrag # 37 von 45
Beitrag ID: #422336
Bewertung:
(3019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi H =:o) L G I,
also die .rsrc Dateien werden ganz normal angelegt bzw. geändert. Bei uns sind auch noch keinerlei Probleme mit diesem Handler aufgetaucht. Am besten selbst testen.

Gruß
TMA


als Antwort auf: [#422300]

komplexe kopierfunktion

Anonym
Beiträge gesamt: 22827

8. Apr 2008, 07:20
Beitrag # 38 von 45
Beitrag ID: #422337
Bewertung:
(3019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
@holgi danke! :)


als Antwort auf: [#422300]

komplexe kopierfunktion

Anonym
Beiträge gesamt: 22827

8. Apr 2008, 19:35
Beitrag # 39 von 45
Beitrag ID: #422338
Bewertung:
(3019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
@TMA: Danke.
@-hans-: Bitte.

Würd' mich freuen, wenn Du nach dem Praxiseinsatz nochmal Feedback gibst und dich bei Fehlern/Problemen meldest.
Vielleicht hat ja auch noch jemand anderes Lust zu testen. Würde das Script gern weiter verfeinern. Netzwerk-Einsatz interessiert mich insbesondere.


als Antwort auf: [#422300]

komplexe kopierfunktion

Anonym
Beiträge gesamt: 22827

8. Apr 2008, 20:16
Beitrag # 40 von 45
Beitrag ID: #422339
Bewertung:
(3019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hi holgi,
gerne :)
heute sind alle bilddateien einer tageszeitung probeweise mit deinem script als "workflow-tool" (arbeitsablaufprogramm hoert sich doch nicht gut an ;-) ) gelaufen. script 1 hat die dateien aus dem eingangsserver 4c und sw abgeholt und an intellitune weitergeleitet. script 2 hat sie aus dem ausgangsordner von intellitune abgeholt und auf die jeweiligen ressorts und lokalausgaben verteilt.

es gab nur einmal einen murks als mehrfach gleichnamige dateien abgelegt wurden ... obwohl ich dem finder with replacing ins aufgabeheft schreibe¿
meldung: kann die datei nicht schreiben, weil schon eine gleichnamige datei existiert

... aber das hat ja nichts mit deinem handler zu tun.
ansonsten gab es "keine!" fehlermelungen!

normalerweise haben wir als workflow-tool :) filemovie, aber das ist als feststehendes proggi halt sehr unflexibel.

by the way: ich muss die tage noch versuchen fuer das ablagescript eine loesung zu finden, die z.b. aus einem alias der im selben ordner wie das script liegt den "basis-targetfolder" zu bestimment. diesem basispfad muss dann noch das ressort bzw. lokalausgabe-kuerzel hinzugefuegt werden. das laesst sich nicht umgehen, da wir taeglich andere tagesordner haben und wir nicht jeden tag die pfade aktualisieren ... moechten. rein theoretisch koennte ich ja mit deinem programm im zielordner tagesaktuell noch einmal die ordnerstruktur des eingangsserver erstellen und die bilddateien dann dort ablegen lassen, aber da noch andere abteilungen dort ordner ablegen ist dieser weg nicht praktikabel ...

sollte das alles wider erwarten funktioniern, dann ist dieser fred hiermit zu ende :-)

cu

hans


als Antwort auf: [#422300]

komplexe kopierfunktion

Anonym
Beiträge gesamt: 22827

9. Apr 2008, 19:38
Beitrag # 41 von 45
Beitrag ID: #422340
Bewertung:
(3019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat von author="-hans-" date="1207678586" by the way: ich muss die tage noch versuchen fuer das ablagescript eine loesung zu finden ... aber da noch andere abteilungen dort ordner ablegen ist dieser weg nicht praktikabel ...


Da möchte ich Dir noch den shell-Befehl mkdir mit der option -p ans Herz legen. Der legt Verzeichnisse ohne Murren an: Falls ein Ordner bereits vorhanden ist, macht's nix, und dieser wird dann einfach verwendet.


als Antwort auf: [#422300]

komplexe kopierfunktion

Anonym
Beiträge gesamt: 22827

14. Apr 2008, 15:45
Beitrag # 42 von 45
Beitrag ID: #422341
Bewertung:
(3019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
ich nochmal :)

woran koennte es liegen wenn das "scriptprogramm" sich nicht mehr ueber den befehl quit schliessen laesst¿ laufen tut's; laesst sich halt nur nicht normal beenden.


als Antwort auf: [#422300]

komplexe kopierfunktion

Anonym
Beiträge gesamt: 22827

14. Apr 2008, 19:22
Beitrag # 43 von 45
Beitrag ID: #422342
Bewertung:
(3019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Den on quit-Handler hast Du noch so drin?
Welches System? Es gibt bei einigen 10.4.x-Systemen einen Bug mit den quit-Handler. Unter 10.4.11 konnte ich ihn allerdings nicht mehr beobachten.


als Antwort auf: [#422300]

komplexe kopierfunktion

Anonym
Beiträge gesamt: 22827

15. Apr 2008, 08:55
Beitrag # 44 von 45
Beitrag ID: #422343
Bewertung:
(3019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
der code passte gerade nicht rein ...
ich melde mich nochmal!


als Antwort auf: [#422300]

komplexe kopierfunktion

Anonym
Beiträge gesamt: 22827

9. Feb 2009, 10:13
Beitrag # 45 von 45
Beitrag ID: #422344
Bewertung:
(3019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
kommando zurück, ich hab' ne loesung ...
Code
set fileKind to kind of (info for d) 
                if fileKind = "alias" then ...




tach zusammen,

kann man den handler vllt. so aendern, dass er aliasdateien (alias file) einfach auslässt? also garnicht berücksichtigt?

Code
on idle 
            if hotFolder is not "" then
            set FILELIST to list files of hotFolder
            if length of FILELIST > 0 then
                    repeat with i from 1 to length of FILELIST
                        FILEACTION(item i of FILELIST as alias)
                    end repeat
            end if
            return delayCheck -- check-interval in seconds
        else
            quit me
        end if
end idle


ich  kann sie zwar ausschliessen, indem ich nur dateien mit bestimmtem suffix listen lasse:
Code
            set FILELIST to list files of hotFolder of extension {"jpg", "tif", "bmp", "eps"} 

aber nicht alle bilddateien haben im hotfolder noch ihr suffix!


als Antwort auf: [#422300]
X