FileVault-friendly replacement for Tiger’s buggy “Get selected Finder items” Automator action.
If the Finder selection contains FileVault-protected items, Automator’s Finder action “Get selected Finder items” as included in Tiger fails to pass on results Automator can handle further in the workflow. Hence this workaround, which converts any Finder selection to a list of POSIX paths, a format Automator handles well and can pass on to the ensuing action in the workflow.
Use it as a replacement for the default “Get selected Finder items” action whenever you anticipate including FileVault-protected items in a Finder selection input for Automator workflows.
Two caveats:
-
The good news: if you intend to run the workflow as a Finder plugin, don’t include any version of a “Get selected Finder items” action at the start of your workflow. Workflows running as Finder plugins automatically pass on the Finder selection in a suitable format to the first action of the plugin workflow. This applies whether the selection includes FileVault-protected items or not.
-
The bad news: infuriatingly, many more of the Automator actions included in Tiger contain bugs that make them break on FileVault-protected items. To routinely avoid those, set up the workflow to immediately copy the selected items out of the FileVault-protected home folder and then process those copies instead of the selected items. To achieve this, put the “Copy Finder items” action directly behind the FileVault-proof “Get selected Finder items” replacement (or as the first action of the workflow if run as a Finder plugin). As the target destination of the copy action, set any location outside the protected home folder, f.i. in the “Shared” folder of the “Users” directory. To have the workflow automatically transfer the processed files back into the protected home folder afterwards, include the “Move Finder items” action at the end and set a folder inside the protected home folder as the target location for the move action.
Refer to the thread “FileVault issues with automating workflows on the Finder selection” at http://bbs.applescript.net/viewtopic.php?id=13507 in the “Automator” forum of the MacScripter site for more in-depth discussion, security considerations and a download link for a working sample workflow that uses Preview to scale a batch of FileVault-protected images selected in the Finder.
on run
script finderSelectionToPosixPaths
on run
finderSelectionToPOsixPathList()
end run
on finderSelection()
tell application "Finder" to get selection
end finderSelection
on finderDocListToAliasList(finderDocList)
set aliasList to {}
repeat with i in finderDocList
set end of aliasList to finderDocToAlias(i)
end repeat
aliasList
end finderDocListToAliasList
on finderDocToAlias(finderDoc)
try
tell application "Finder" to get finderDoc as alias
on error errormsg
set markerString to "xyzabazyx"
repeat while errormsg contains markerString
set markerString to markerString & markerString
end repeat
set oldTIDs to AppleScript's text item delimiters
set AppleScript's text item delimiters to {"\\\""}
set theLst to text items of errormsg
set AppleScript's text item delimiters to {markerString}
set messageWithoutQuotes to theLst as string
set AppleScript's text item delimiters to {"\""}
set theLst to text items of messageWithoutQuotes
set idCounter to 1
repeat with i in (items 2 thru -4 of theLst)
if idCounter is 1 then
set idCounter to 0
try
set pathString to i & ":" & pathString
on error
set pathString to i
end try
else
set idCounter to 1
end if
end repeat
set AppleScript's text item delimiters to {markerString}
set theLst to text items of pathString
set AppleScript's text item delimiters to {"\""}
set pathString to theLst as string
set AppleScript's text item delimiters to oldTIDs
try
alias pathString
on error
alias (pathString & ":")
end try
end try
end finderDocToAlias
on finderSelectionToPOsixPathList()
aliasListToPosixPathList(finderDocListToAliasList(finderSelection()))
end finderSelectionToPOsixPathList
on aliasListToPosixPathList(thisAliasList)
set PosixPathList to {}
repeat with i in thisAliasList
set end of PosixPathList to aliasToPosixPath(i)
end repeat
PosixPathList
end aliasListToPosixPathList
on aliasToPosixPath(thisAlias)
POSIX path of thisAlias
end aliasToPosixPath
end script
run script finderSelectionToPosixPaths
end run