Hi everybody, I’m hitting a weird snag with a script I made. I’m a total newbie, so this took me quite a while to put together. Look below the script for more info on what I’m trying and why, but the gist is that I’m creating symbolic links for a set of files. I’m running a shell script to do it. The script appears to run fine, no errors or anything. But there are no links when it’s done. And attempting to run it again gives me this error:
error “ln: Mac Server:Users:Maddux:Movies:Boxee Videos:TV Shows:Arrested.Development.(2003).S01E01.Pilot.mkv: File exists” number 1
But there is definitely no file by that name in that folder. Not sure what’s going on.
(Note: sorry for the over-commenting in the script. Like I said, I’m a little green so I mostly did it to keep it all straight while I’m working on it.)
--sub-routine for character replacement in string on replace_chars(this_text, search_string, replacement_string) set AppleScript's text item delimiters to the search_string set the item_list to every text item of this_text set AppleScript's text item delimiters to the replacement_string set this_text to the item_list as string set AppleScript's text item delimiters to "" return this_text end replace_chars --sub-routine for creating symbolic link for given file on createSymbLink(currentEpisode, charToRemove, symbLinkFolder) set newFileName to currentEpisode as string set newFileName to text (charToRemove + 1) thru end of newFileName set newFileName to my replace_chars(newFileName, "Season ", "S") set newFileName to my replace_chars(newFileName, ":0", "E0") set newFileName to my replace_chars(newFileName, ":1", "E1") set newFileName to my replace_chars(newFileName, ":2", "E2") set newFileName to my replace_chars(newFileName, " ", ".") set newFileName to my replace_chars(newFileName, ":", ".") do shell script "ln -s " & quoted form of currentEpisode & " " & quoted form of (symbLinkFolder & newFileName) password "*****" with administrator privileges end createSymbLink on run --locate original files set tvFolder to (choose folder with prompt "Select where your TV shows are held.") as string --choose where to store symbolic links set symbLinkFolder to (choose folder with prompt "Choose where to store your symbolic links.") as string --determine how many characters to remove from path for creating symbolic link set charToRemove to number of characters of tvFolder tell application "Finder" --get shows in TV Shows folder set showList to every folder of folder tvFolder --declare show loop index set showInd to 1 --cycle through each show repeat the count of showList times --select the current show based on show index set currentShow to item showInd of showList as string --get seasons of current show set seasonList to every folder of folder currentShow --declare season loop index set seasonInd to 1 --cycle through each season repeat the count of seasonList times --select current season based on season index set currentSeason to item seasonInd of seasonList as string --get episodes of current season set episodeList to every file of folder currentSeason --declare episode loop index set episodeInd to 1 --cycle through each episode repeat the count of episodeList times --select current episode based on episode index set currentEpisode to item episodeInd of episodeList as string --create symbolic link for current episode my createSymbLink(currentEpisode, charToRemove, symbLinkFolder) --select next episode set episodeInd to episodeInd + 1 end repeat --select next season set seasonInd to seasonInd + 1 end repeat --select next show set showInd to showInd + 1 end repeat end tell end run
For those who want to know what the heck I’m doing:
I’m wanting to create symbolic links for each file in my video collection. I have a Boxee Box and it wants the filenames in a very specific format (Show.Name.(Year).S##E##.Episode.Name.ext) but I find that totally hard to read on my other clients (Tivo, iOS Devices, etc) so I like to keep my files organized more simply (Show Name (Year)/Season ##/## Episode Name.ext). It’s not a big deal but I thought it might be some good scripting practice. After some searching and finding that character replacement subroutine and a basic shell for my loop I thought I had everything figured out. Everything works fine and it spits out the right filenames, but no file afterwards. But running it again seems to hint that there IS a file there.
Anyway, if anybody’s got time to check it out I’d be much appreciated.