View Full Version : AppleScript

04-10-2007, 08:53 PM
Is SuperDuper scriptable? I have been using Retrospect and was thinking of changing over to SuperDuper for it's ease, speed and bootable image options. I had pieced together an AppleScript to run with Retrospect that would log all of the actions as far as volumes, files, dates, times, etc. of the backup and also send out an e-mail if there was an error. Any way to do this with SuperDuper?


04-10-2007, 09:09 PM
It's scriptable, yes. But you can get it to send notifications much more easily: just install Growl (http://www.growl.info) and configure the MailMe notification type...

04-10-2007, 09:38 PM
That may be, but, the e-mail is the least of the items. I like to track the backup progress via the database that I've set up. I can see if the backups are taking longer than expected; if the users have added a bunch of "junk" to their machines; that everyone backed up and how much; etc.

If it is scriptable, is there any help doc that gives the available attributes/properties/methods/etc?


04-10-2007, 09:45 PM
The scripting dictionary is available in the normal way. However, I don't think you're going to find super extensive abilities. You could, however, modify our "schedule driver" (which is an applescript, available in the application bundle) to log additional information if necessary.

04-11-2007, 06:54 PM
I'm not sure what you mean by the "normal way". I've done a very minimal amount of Apple Script and all of it was done by using other sample code and modifying it to fit my needs. For example, this is the code that I cobbled together from samples in Retrospect and FileMaker to log the actions of the backup:

on volumeEnd given VolumeName:theVolume, KBCopied:theKB, FileCount:theFileCount, DurationInSeconds:theDuration, BackupDate:theBackupDate, startDate:theStartDate, endDate:theEndDate, destinationName:theDestination, ClientName:theClient, zoneName:theZone, scriptName:theScript, backupTypeString:theBackupType, subvolumeDiskName:theDiskName, fileErrorCount:theFileErrorCount, volumeErrorCode:theVolumeError, volumeErrorMessage:theVolumeErrorMessage, activatorCodeString:theActivatorCode

set gStorageSet to theDestination
set gNumVolumesBackedup to gNumVolumesBackedup + 1
if theVolumeError is not 0 or theFileErrorCount is not 0 then
set gVolumeErrors to gVolumeErrors + 1
end if

if theDiskName is not "" then
set theParent to "The Subvolume’s parent disk is \"" & theDiskName & "\"."
set theParent to ""
end if
set theDuration to secondsConverter(theDuration)

if theVolumeError is 0 then
set theSuccess to "successfully"
set mySubject to "Retrospect: Success"
set gBackUpReport to gBackUpReport & "Volume \"" & theVolume & "\" completed " & theSuccess & ¬
", copying " & theFileCount & " files for " & theKB & " K with " & theFileErrorCount & ¬
" errors." & return & return & "Script \"" & theScript & "\" finished copying volume \"" & ¬
theVolume & "\" to destination \"" & theDestination & "\"." & return & return & "Duration: " & ¬
theDuration & "." & return & return & lineDelimiter & return & return
set theSuccess to "with error " & theVolumeError & ": " & theVolumeErrorMessage
set mySubject to "Retrospect: Error " & theVolumeError & ": " & theVolumeErrorMessage
set gBackUpReport to gBackUpReport & "•Error•" & return & return & ¬
"Volume \"" & theVolume & "\" completed " & theSuccess & "." & return & return & lineDelimiter & return & return
end if

-- Record the parameters for each volume in a new record in a database
tell application "FileMaker Pro"
tell document "Retrospect Database"
create new record with data {theVolume, theKB, theFileCount, theDuration, theBackupDate as string, ¬
theStartDate as string, theEndDate as string, theDestination, theClient, theZone, theScript, ¬
theBackupType, theDiskName, theFileErrorCount, theVolumeError, theVolumeErrorMessage, theActivatorCode}
end tell
end tell
end volumeEnd

04-11-2007, 07:04 PM
Well, take a look at the schedule driver in the application package ("Copy Job Script.template") and you'll see how it works and where you can fit your stuff in...

04-11-2007, 08:48 PM
Thanks for pointing me in that direction. I did find it and was able to see and understand what it's doing. What I could not seem to find were the specific attributes that I am writing to the FM database. So, I thought I would look in the log file to see if there was anything in there I could see. What I found is that the date and (obviously) time is there as well as the volume information:
| 04:35:08 AM | Info | Started on Wed, Apr 11, 2007 at 4:35 AM
| 04:35:08 AM | Info | Source Volume: MacBook, mount: /, device: /dev/disk0s2, media: TOSHIBA MK1234GSX, interconnect: Internal SATA, file system: "Journaled HFS+", OS: 10.4.9 (8P2137), capacity: 111.47 GB, used: 54.91 GB, directories: 81558, files: 401214, ejectable: NO, ACLs: Disabled
| 04:35:08 AM | Info | Target Volume: Maxtor MacBook BU, mount: /Volumes/Maxtor MacBook BU, device: /dev/disk1s3, media: Maxtor OneTouch III, interconnect: External FireWire, file system: "Journaled HFS+", OS: 10.4.9 (8P2137), capacity: 114.75 GB, used: 52.58 GB, directories: 81531, files: 401895, ejectable: NO, ACLs: Disabled

I also found at the end of the log:
| 05:39:32 AM | Info | Evaluated 481570 items occupying 54.43 GB (81555 directories, 367861 files, 32154 symlinks)
| 05:39:32 AM | Info | Copied 481447 items totaling 52.20 GB (81535 directories, 367760 files, 32152 symlinks)
| 05:39:32 AM | Info | Cloned 52.20 GB of data in 3852 seconds at an effective transfer rate of 13.88 MB/s

So it obviously knows this information in the program somewhere since it is writing it to the log. The question is can I get to that information via AppleScript and, if so, what are the variable names?

04-11-2007, 09:11 PM
You'll have to parse the log. Of course, you already have the date and time...

04-28-2007, 09:45 AM
Well, I can't seem to find any examples to parse the log file. Can anyone help out?

05-05-2007, 09:46 AM
Noone has any simple examples for this? :(

05-05-2007, 10:11 AM
Doesn't look like it... sorry!

05-07-2007, 05:50 PM
Hi ShosMeister

Maybe some good folks at either site below could help you construct your script.
I serached for "parse" on both sites which came up with quite a few ideas.