Here’s a script that I use to generate the local-url fields for my
BibDesk databases necessary for my own scripts to be able to access
linked files. The script is only a very minor modification of
something I found a while ago on the
BibDesk wiki . Also, it is still not perfect, as it would overwrite local-url
fields very time it is run. I just don’t have the time and motivation
to fix that right now :-(
(*
Add Local - Url fields to all publications , containing a relative ( if possible ) path to the file encoded in the Bdsk - File - 1 entry .
* )
tell application "BibDesk"
activate
set theDoc to get first document
set theFile to ( get file of theDoc )
set theDocDir to my containerPath ( get file of theDoc )
tell theDoc
set thePublications to displayed publications
repeat with currentpub in thePublications
tell currentpub
set theID to get id
set the value of field "Local-Id" to theID
if (( count of ( get linked files )) > 0 ) and (( get linked file 1 ) is not missing value ) then
set linkedFile to linked file 1
tell linkedFile
set thePath to get POSIX path
end tell
--set thePath to my relativePath(thePath, theDocDir)
(* we might want to change the following line to a conditional ,
to prevent that manually changed local - urls get overwritten when
this script is used again * )
set the value of field "Local-Url" to thePath
end if
end tell
end repeat
end tell
end tell
on relativePath ( fullPath , basePath )
set theLength to length of basePath
if ( length of fullPath > theLength ) and ( text 1 thru theLength of fullPath ) = basePath then
return text theLength thru end of fullPath
else
return fullPath
end if
end relativePath
on containerPath ( theFile )
set AppleScript 's text item delimiters to "/"
set theComponents to text items of ( POSIX path of theFile )
if last item of theComponents is "" and ( count of theComponents ) > 2 then
set theComponents to items 1 thru - 3 of theComponents
else
set theComponents to items 1 thru - 2 of theComponents
end if
return ( theComponents as text ) & "/"
end containerPath