An alias contains two pieces of information: a unique identifier of the file it links to, and the path and file name of the file it links to.
If you rename or move a file, and then create a new file with the path and file name that the file originally had, then any alias that linked to the original file now links to the new file.
However, if you rename or move a file without replacing it, and then invoke an alias, the alias is updated to point to the new path and file name, making use of the unique identifier to do so.
A symbolic link, on the other hand, does not contain a unique identifier to a file, and would appear as broken if the file is renamed or moved and not replaced with a file of the same path and file name.
Your choice should depend on which scenario suits you best.
mkalias
is a binary available in a set of tools here. It can also be installed via Homebrew with brew install osxutils
.
This is a SH shell script that calls AppleScript to create an alias.
I'm including the shell script here for future reference incase it goes missing from the nets.
#!/bin/sh
# make_alias
# This script takes two command-line arguments:
# 1) The name (relative or full path) of a source file or folder (directory)
# 2) The name (relative or full path) of a destination folder (directory)
# The script makes a Finder-style alias to the source file or folder
# and puts it in the specified destination folder.
#
# Cameron Hayne (macdev@hayne.net), December 2003
# Modified as suggested by Paul Russell (prussell@sonic.net), May 2006
# to allow either file or folder as source
# Mofified to work with ".app" files, January 2007
scriptname=`basename $0`
if [ $# -lt 2 ]; then
echo "Usage: $scriptname srcPath destPath"
exit
fi
srcPath=$1
destPath=$2
if [ ! -e "$srcPath" ]; then
echo "$scriptname: $srcPath: No such file or directory"
exit
fi
# remove possible trailing slash from $srcPath
srcPath=${srcPath%/}
# set $srcType to "file" or "folder" as appropriate
if [ -d "$srcPath" ]; then
if [ "${srcPath##*.}" == "app" ]; then
srcType="file"
else
srcType="folder"
fi
else
srcType="file"
fi
# check if the $destPath directory exists
if [ ! -d "$destPath" ]; then
echo "$scriptname: $destPath: No such directory"
exit
fi
# check if we have permission to create a new file in the $destPath directory
if [ ! -w "$destPath" ]; then
echo "$scriptname: No write permission in the directory $destPath"
exit
fi
case $srcPath in
/*) fullSrcPath=$srcPath ;;
~*) fullSrcPath=$srcPath ;;
*) fullSrcPath=`pwd`/$srcPath ;;
esac
case $destPath in
/*) fullDestPath=$destPath ;;
~*) fullDestPath=$destPath ;;
*) fullDestPath=`pwd`/$destPath ;;
esac
/usr/bin/osascript > /dev/null <<EOT
tell application "Finder"
set macSrcPath to POSIX file "$fullSrcPath" as text
set macDestPath to POSIX file "$fullDestPath" as text
make new alias file to $srcType macSrcPath at folder macDestPath
end tell
EOT
Best Answer
I wasn’t aware of a way, but with some trial and error, I found that hitting
→
or/
will take you to the original item for symbolic links. It doesn’t seem to work for aliases. There should probably be a “Show Original” action.