The basic question is:
How can I pass a filename to the Spotlight search module in Automator?
The essential problem:
I have hundreds of broken aliases scattered throughout a particular directory on my HD. The original files DO STILL EXIST, but for some reason the aliases have lost their connection. I would like to replace them all with symlinks, so that they can be backed up by Rsync.
Here is a scaled-down example of a folder with broken aliases in it:
Now here is an example of a sub-directory that contains both the originals of some of the broken aliases, as well as additional copies of the SAME alias, that still point to another location for their originals:
And lastly, here is an image of a directory that contains the master files to some of the aliases that were located in both of the previous 2 locations:
So what I need to do is:
- Identify all aliases in a user-defined directory
- Use the filenames of those aliases to locate their original files, in a second user-defined directory (recursively and ensuring not to identify a second alias as an original)
- remove the alias
- create a symlink to the original file, in the former location of the alias
I'm using Automator wherever I can, and Applescript wherever I must. Prior to the response that prompted these edits, my workflow did the following:
- Prompt for the location to look for original files
- Prompt for location to look for aliases
- Get POSIX paths to all aliases
- Get text filenames of all the aliases
Now, it gets a bit further but with some problems:
- I had an alias titled "3dfx & ambience.rfl" (changed already in the screenshots to "3dfx and ambience.rfl"). The applescript provided would fail on that file due to the ampersand.
- After fixing #1, the script ran and did indeed remove broken aliases and replace them with symlinks. But the symlinks pointed to the parent folder that contained the originals, not the originals themselves. So I ended up with 2 symlinks, "Luftrum 1 – Thor Ambient.rfl" and "Luftrum 2 – Thor Ambient II.rfl", that in reality pointed to the "Luftrum" folder shown in my third screenshot above.
Hopefully this will be enough detail to ultimately arrive at a working solution. I can tell it's very close.
Best Answer
If you simply want to pass a file name to the Spotlight action
The pass the file name from an action to a set variable Action
THIS IS AN UPDATE
Using Automator actions and Applescript to store properties for later retrieval:
The idea here is the first action writes out a applescript file to the documents folder.
The script will be used to store information we get along the way and then retrieve it later on in the final Applescript action.
We do this because we need to pass the final script multiple bits of information. Which we cannot do with the normal variables in Automator.
The Actions.
The script.
2, Ask for Finder Items: This is for the Broken Alias folder.
3,Run Applescript:
( The write outs are done by the Action Applescript loading the storage file script. This will be a version of sorts. It will then change properties in its version and re-write the file out again replacing the old one)
4,Get Folder contents:
5, Filter Finder Items:
All: Kind : is : other : alias
6, Run Applescript:
Writes out broken alias PATHS to a property in the storage script file.
7, Ask for Finder Items: This is for the Original files folder.
8,Run Applescript:
Writes out the Original files folder to a property in the storage script file.
9, Run Applescript:
This retrieves the information from the storage script. This will take the list of paths of the dead alias files.
Try and Find a matching file in the Original files folder. It will look at all matches but ignore aliases.
Remove the old Alias file (checking it is a alias file first)
Create a symlink in the folder the old alias was in from the matching file found.
Only alias files should be deleted. If no matching file is found then the alias file will not be deleted. Nor will a symlink be created.
.
Test first.. use at your own risk and all that..