5

With Finder, Cmd-L is a short-cut to make an alias of a file/directory. How can I use the command line to do that?

I tried 'ln -s', but it generates the 'Symbolic Link', not 'Alias'.

2

1 Answer 1

8

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 ([email protected]), December 2003
# Modified as suggested by Paul Russell ([email protected]), 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
3
  • The shell script works fine, whereas the osxtools are outdated (not compile with Xcode 3.0).
    – prosseek
    Feb 10, 2011 at 1:09
  • @proseek, the source for the osxtools is available if you want to recompile. mkalias doesn't really need any updates, it's a very simple file.
    – zevlag
    Feb 10, 2011 at 16:17
  • 1
    I got "mkalias.c:303: error: ‘FSSpec’ has no member named ‘name’" error when I compile it with gcc 4.2.1. I guess the code is outdated with Carbon library.
    – prosseek
    Feb 11, 2011 at 5:28

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .