Ever wished you could move files to the trash from the command line on the Mac? Here’s how.

First, buy a Mac. Then

Option 1 (uses bash): add the following to your ~/.bash_profile:

function rem {
  for b in "$@"
  do
    osascript -e "tell app \"Finder\" to delete POSIX file \"${PWD}/$b\""
  done
}

Then type source ~/.bash_profile in Terminal.

Or Option 2 (uses Python and gives slightly more meaningful error messages): make an executable file called rem or trash somewhere in your $PATH (updated version 1 Oct 2018, in collaboration with Dave Abrahams: see here):

#!/usr/bin/env python
import os
import sys
import subprocess

if len(sys.argv) > 1:
    files = []
    for arg in sys.argv[1:]:
        if os.path.exists(arg):
            p = os.path.abspath(arg).replace('\\', '\\\\').replace('"', '\\"')
            files.append('the POSIX file "' + p + '"')
        else:
            sys.stderr.write(
                "%s: %s: No such file or directory\n" % (sys.argv[0], arg))
    if len(files) > 0:
        cmd = ['osascript', '-e',
               'tell app "Finder" to move {' + ', '.join(files) + '} to trash']
        r = subprocess.call(cmd, stdout=open(os.devnull, 'w'))
        sys.exit(r if len(files) == len(sys.argv[1:]) else 1)
else:
    sys.stderr.write(
        'usage: %s file(s)\n'
        '       move file(s) to Trash\n' % os.path.basename(sys.argv[0]))
    sys.exit(64) # matches what rm does on my system

Now, either way, to move blah.txt to Trash, simply type rem blah.txt. Wildcards and lists of files are permitted. You even get the sound effects!

(This makes use of Applescript and works for me on OS X Tiger and Leopard. Thanks to kw for pointing out the problem with Option 1 and leading me to think of an alternative - 3 July 2008. And thanks for icke for showing me how to make the bash version work all the time - 6 Nov 2008.)



comments powered by Disqus