Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Software>Applescript: duplicate File von A nach B

Applescript: duplicate File von A nach B

Subsudo19.12.0511:02
Hallo ihr Apple-Verrückten!

Wollte mal nachfragen, ob jemand von euch etwas von Applescripts versteht. Wollte ein Script schreiben, bei dem per Ordneraktion ein abgelegtes File (kein Ordner sondern Bilddateien) in einen vordefinierten Backupordner kopiert wird. Leider habe ich noch nie mit Scripts gearbeitet.

Nun gibt es sicher verschiedene Lösungen, besonders elegant wäre jedoch, wenn Files mit gleichem Namen nicht ersetzt würden, sondern umbenannt. Ein einfaches Skript wie dieses scheint nicht zu funktionieren:

on adding folder items to this_folder after receiving these_items
tell application "Finder"
duplicate these_items to desktop (oder besser ein Ordner)

end tell
end adding folder items to

Eleganter wäre evt. ein Shell-Script:

property dialog_timeout : 120 -- set the amount of time before dialogs auto-answer.

on adding folder items to this_folder after receiving added_items
do shell script "cp -R /Users/christoph/Documents/test/"
end adding folder items to


Beides funktioniert bei mir nicht als Ordneraktion, wie ich den Pfad zu dem Quellenordner angeben muss ist mir auch nicht klar. Mit / oder : ?

Im Internet komme ich auch nicht weiter, für jemand anders ist dies sicher ein Klacks. Bin offen für alle Vorschläge!
0

Kommentare

Kronar19.12.0511:19
Welches Betriebssystem ? Tiger ?
0
Subsudo19.12.0511:40
Genau, 10.4.3
0
Kronar19.12.0512:30
Schon mal Automator gestartet ????

Damit sollte das eigentlich ziemlich schnell funktionieren...
0
Subsudo19.12.0512:42
vielen Dank für die Antwort. Automator kann man jedoch nicht als Ordneraktion anfügen, oder täusche ich mich?
0
_mäuschen
_mäuschen19.12.0513:05
Etwa in so

property done_foldername : "Copied files"
property originals_foldername : "Original files"
property newfile_extension : ""

on adding folder items to this_folder after receiving these_items
tell application "Finder"
if not (exists folder done_foldername of this_folder) then
make new folder at this_folder with properties {name:done_foldername}
end if
set the results_folder to (folder done_foldername of this_folder) as alias
if not (exists folder originals_foldername of this_folder) then
make new folder at this_folder with properties {name:originals_foldername}
set current view of container window of this_folder to list view
end if
set the originals_folder to folder originals_foldername of this_folder
end tell
try
repeat with i from 1 to number of items in these_items
set this_item to item i of these_items
set the item_info to the info for this_item
tell application "Finder"
my resolve_conflicts(this_item, originals_folder, "")
set the new_name to my resolve_conflicts(this_item, results_folder, newfile_extension)
set the source_file to (move this_item to the originals_folder with replacing) as alias
end tell
process_item(source_file, new_name, results_folder)
end repeat
on error error_message number error_number
if the error_number is not -128 then
tell application "Finder"
activate
display dialog error_message buttons {"Cancel"} default button 1 giving up after 120
end tell
end if
end try
end adding folder items to

on resolve_conflicts(this_item, target_folder, new_extension)
tell application "Finder"
set the file_name to the name of this_item
set file_extension to the name extension of this_item
if the file_extension is "" then
set the trimmed_name to the file_name
else
set the trimmed_name to text 1 thru -((length of file_extension) + 2) of the file_name
end if
if the new_extension is "" then
set target_name to file_name
set target_extension to file_extension
else
set target_extension to new_extension
set target_name to (the trimmed_name & "." & target_extension) as string
end if
if (exists document file target_name of target_folder) then
set the name_increment to 1
repeat
set the new_name to (the trimmed_name & "." & (name_increment as string) & "." & target_extension) as string
if not (exists document file new_name of the target_folder) then
-- rename to conflicting file
set the name of document file target_name of the target_folder to the new_name
exit repeat
else
set the name_increment to the name_increment + 1
end if
end repeat
end if
end tell
return the target_name
end resolve_conflicts

-- this sub-routine processes files
on process_item(source_file, new_name, results_folder)
-- NOTE that the variable this_item is a file reference in alias format
-- FILE PROCESSING STATEMENTS GOES HERE
try
with timeout of 900 seconds
tell application "Finder"
duplicate source_file to results_folder
end tell
end timeout
on error error_message
tell application "Finder"
activate
display dialog error_message buttons {"Cancel"} default button 1 giving up after 120
end tell
end try
end process_item
0
Subsudo19.12.0521:18
ist leider nicht unbedingt dass, was ich suche. ist ja einfach ein leicht manipuliertes Duplicate as ... welches schon im Folder Actionscript-Ordner bei Tiger dabei ist.

Was ich brauche ist ein einfaches Script welches die Datei nur in ein anderes Verzeichnis kopiert, ohne jedoch die Originaldatei zu verschieben oder sonstwie zu verändern (wie im obengenanten Beispiel)

Keine Idee?
0
_mäuschen
_mäuschen20.12.0501:19
Ja, richtig, ist ein modified script.

Hier ein mögliches, einfaches Lösungsbeispiel für den script mit shell Aufruf

property destination_folder : "/Users/christoph/Documents/test"
on adding folder items to this_folder after receiving added_items
repeat with i from 1 to number of items in added_items
set this_item to item i of added_items
do shell script "cp -R" & " " & quoted form of the POSIX path of this_item & " " & quoted form of the POSIX path of destination_folder
end repeat
end adding folder items to
0
Subsudo20.12.0522:56
_mäuschen<br>
Ja, richtig, ist ein modified script.

Hier ein mögliches, einfaches Lösungsbeispiel für den script mit shell Aufruf

property destination_folder : "/Users/christoph/Documents/test"
on adding folder items to this_folder after receiving added_items
repeat with i from 1 to number of items in added_items
set this_item to item i of added_items
do shell script "cp -R" & " " & quoted form of the POSIX path of this_item & " " & quoted form of the POSIX path of destination_folder
end repeat
end adding folder items to

Vielen Dank für deine Antwort, inzwischen habe ich einen Kollegen gefragt, der mir schnell ein Script geschrieben hat. Timestamp ist eine Möglichkeit, den Files eine individuelle Kennung zu geben, ohne die Gefahr ein File zu überschreiben... Pfade werden offenbar mit POSIX Path gesetzt. Was man nicht alles lernen kann...
0
_mäuschen
_mäuschen20.12.0523:12
Schön für Dich.

Wobei der 'Tiger'-script Namenskonflikte auflöst.
Und das mit dem POSIX wird nötig, sobald Du nicht innerhalb des action-folders Daten schreiben willst. Also nach einem anderen Folder oder Volumen.


Schau Dir die scripts nochmals in Ruhe an. Viel Glück

0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.