I use the terminal on a daily basis, I will often use rm DirectoryName. Sometimes I get a little crazy and do rm *. As you can imagine, these shenanigans have sometimes come back and hit me in the face. Does anyone know how I create a mapping so rm whatever moves everything to the trashcan which I then delete manually.

  • 3
    you can do mv /file/to/delete ~./Trash – user6124 Jul 18 '11 at 9:42
  • 6
    It's hard to put training wheels on a precision tool like rm without breaking other scripts. Something like alias rm=/bin/rm -i should get you safely trained out of your crazy. Also - which Trash directory do you want rm to use? It gets clunky since Mac OS X has a trash directory for each volume as well as a user level trash can. – bmike Jul 18 '11 at 15:53
  • 1
    If you use zsh, by default it will prompt you when you do rm * or rm /path/* – Daniel Serodio Jun 13 '13 at 22:59
  • 1
    Add me to the list of people who think this is such a heinously dangerous question to answer. If you worked for me, I would struggle not to slap you until you promised NEVER to "get a little crazy" at a shell prompt and issue commands like 'rm'. I would also make double sure that you don't have sudo administrative privileges for any machine I use or have responsibility for. Before I type "rm" or "sudo", I physically stand up and ask myself whether I'm 100% certain that I understand the repercussions of what I'm about to do. Maybe you just need to do an "rm -rf" and suffer for a while. – Bill Smith Mar 28 at 23:12
  • Apologies in advance if my comment seems brutal, but the very question horrifies me. – Bill Smith Mar 28 at 23:18

Bad Idea

Using rm to move files to trash is like weed. It is common and pleasuring but can be bad for you in the future. ;)

You really need control yourself when using rm.

Don't use rm

Imagine, you get used to rm moving to trash and make a habit of it. Sure, your system is safe but when you log into a friend's (or your wife's or your boss') notebook and have to delete something? You'll be actually using the real rm - deleting those files forever. It's a bad habit, and you need to know that.

So instead, install rmtrash and make a habit of using it:

# install rmtrash, (either from the macports or by the brew.)
$ alias trash="rmtrash"
$ alias   del="rmtrash"       # del / trash are shorter than rmtrash

Correcting bad habits

Another thing you can do to force yourself to use rmtrash instead of rm is alias it to a custom message in your .profile.

alias rm="echo Use 'del', or the full path i.e. '/bin/rm'"

So, whenever you use rm, you'll be prompted to either use rmtrash or /bin/rm. Remember, this is only temporary, after a while you should remove the alias.

Never ever, do something like this:

$ pwd
$ cd /tnp; rm -rf *
sh: cd: /tnp: No such file or directory

Pop Quiz: In what directory will the rmcommand run? :)

Ps: Just removed some unwanted edits to this post, what added some nonsenses about the aliases.

  • 13
    && is your lifeline. ; is the devil. P.S. The answer is that pretty much everything on your system disappears, in the above example. – Jason Salaz Jul 20 '11 at 8:06
  • Although, rm doesnt do secure delete, but moving to trash / empty does (in my setup) . – Mike Graf Oct 20 '14 at 21:13
  • 1
    Debian/Ubuntu users install trash-cli instead, ex. aptitude install trash-cli - see github.com/andreafrancia/trash-cli – Daniel Sokolowski Feb 18 '16 at 1:44
  • @jm666 Also check out trash (blog post & source). It asks Finder for trashing files. Moreover it can also use standard Objective C filesystem APIs (faster) and fallback to Finder if insufficient rights. brew install trash – parth Jul 5 '17 at 5:29
  • rmtrash is really old, having been last updated in 2003, and it shows. It has many fewer options than rm, and if you say rmtrash on a secondary volume it moves those files to your user's trash folder on the system drive, which can take a long time for large files. The trash option recommended by parth is better, solving the keep-on-same-volume problem, but still missing many rm options. – Warren Young Jan 28 '18 at 1:58

I can think of a dozen ways to code this, but categorically refuse to type any of them up in an answer. I strongly recommend you curb your habit of getting a little crazy. You shouldn't be in the habit of using rm at all if you can't use it properly.

The fundamental problem here is that even if you install a safety net on your own system, that will only help you keep your bad habits and when you happen to be on another machine some day that doesn't have the same custom protections, you will do something epicly bad.

The proper solution is to use rm as it was meant to be used including manually adding the -i argument whenever you are in doubt about how a glob will expand, and have good system backups that you can restore in the event of serious user error. Trying to add "trash" to commands that in the rest of the universe don't use it is a half-way step that is the worst of both worlds.

Either use the trash or don't. Using rm doesn't go to trash, it removes.

If you want to use the trash, there is nothing wrong with that. Just get in the habit of using the rmtrash command instead of rm. This will help your brain understand what's happening and not get you into a bad habit that will cause grief later.

  • 1
    Your point doesn't compute in this instance. People delete things accidentally on a daily basis, system backups do not work in the case of a home pc (which mine is) as the resources are limited, a move to trash can is a far more efficient way of handling these deletions for my particular use case. – steve Jul 21 '11 at 11:11
  • 5
    @steve you missed the point entirely. rm by definition removes a file from the disk. It doesn't send it to the trash. Teaching yourself to use rm when you mean send to trash sets you up for disaster. If you want to send to trash, use rmtrash or a program that was designed for the job, then you won't run into nightmares later. I wasn't saying using the trash is inherently wrong, but if you want to use it, don't wire it up to something that was not intended to use it! – Caleb Jul 21 '11 at 11:13
  • 2
    brew install rmtrash and stop using rm – GabLeRoux Feb 5 '14 at 20:16
  • This is an awesome answer, cleared up a few things for me. I'll try to form a habit of using rmtrash instead of rm. – Sheharyar Feb 16 '15 at 17:56
  • sudo add-apt-repository ppa: nateshmbhat/rm-trash . Then install "rm-trash" – Natesh bhat Nov 21 '18 at 2:54

Use a command line tool like rmtrash or a script tat uses appscript to call the Finder to do there delete.

After installing rmtras to say /usr/local/bin/rmtrash the creat an alias for bash

alias rm='rmtrash'

You can use \rm to call rm directly and ignore the alias

  • 14
    If you do use a tool like rmtrash, please do yourself a favor and use it by it's own name. Never alias things that are not rm to rm, it will some day bite you. – Caleb Jul 18 '11 at 9:45
  • rmtrash isn't compatible with rm (doesn't support the same command line parameters like -r) so an alias really isn't useful in any case – Perry Jul 21 '17 at 16:16

There are ways to protect yourself from horrible outcomes from rm. However, I agree with the other commenters here: very few are any good.

Do not for a minute believe that changing the command environment will help you. For example, you will find people online everywhere recommend doing this sort of thing:

alias rm="rm -i"


function rm()
    echo >&2 'rm forbidden; use "/bin/rm"'
export -f rm

This will not work. Period. There are loads of use cases where these little parlor tricks will fail you miserably.

The only robust way I have used to spare myself from the danger of rm is by setting up a regular backup process through cron over the directories where I work. Raw UNIX does it for you nicely, with great simplicity, using find in conjunction with -mtime to check for files that have been updated within or since a certain time.

  • +1 for cron alone. Thanks :) – bmike Mar 29 at 2:02

Just want to add a helpful habit to get into for those that don't do this already. Before using rm for anything, do 'ls' on it first. That way you can see all the files that you intend to delete. Then instead of retyping, just pull previous 'ls' command up and swap out ls for rm. This habit has reduced a lot of anxiety when invoking rm.


Introduction (you can skip it)

For me rm -i would be enough, because it prompts you before deleting any file. However, some extra security provided by safe-rm isn't a bad idea at all.

A simple alias like rm=safe-rm -i could be enough, however rm -rf would not work, because -i is overriden by -f.

So, we have to make sure that -i always come after -f!

My solution (3 steps):

  • Install safe-rm: brew install safe-rm

    You can still work with rm, but you have modify the RM_BIN in the next step

  • Edit your ~/.profile (or bash_profile or whatever), and put the following code snippet, (which contain an alias and a function):

    alias rm="rm_i"
    function rm_i(){
    RM_BIN=safe-rm # you can replace it with regular rm if you like
    argsDone=0 # to make sure arguments are before the files
    for var in "$@"
        if [[ $var == \-* ]] ; then
            if [ $argsDone -eq 1 ] ; then
                $RM_BIN # just to show the usage of rm
            args+=" $var"
            files+=" $var"
    args+=" -i" # Put -i at the end (so rm -rf will not ignore it)
    $RM_BIN $args $files
  • Finally, logout and login, so the updates in the .profile are applied. DON'T use it before a logout/login!


  • It can be applied to any Linux distro, with slight modifications.
  • It does NOT move your staff to thrash. It just asks you before deleting each file!
  • It works with -rf and with regexes.
  • If you really want to use rm -rf WITHOUT being asked for every single file/folder you can still use /bin/rm -rf (or safe-rm -rf if you had installed it).
  • No more unintentional rm -rf or rm * ;)
  • 5
    Aliasing rm to anything larger than itself (e.g. alias rm='sudo rm') is like strapping a Uzi to a kitchen knife: someday you will get more than you bargained for when you go to cut that pineapple. Aliasing rm to anything smaller than itself (e.g. alias rm='rmtrash') is like letting your children play with disarmed hand grenades and not teaching them what they actually are: someday when they encounter a real one they won't treat it with the proper caution. Either way—aliasing rm is bad for your personal safety and public health! – Caleb Jun 27 '14 at 5:22
  • 2
    Using something like safe-rm is reasonable advice. Aliasing it to rm is not. Use it under its own name or a unique alias so you don't take for granted a safety net that will not always be there. – Caleb Jun 27 '14 at 5:28
  • I see your point. BUT, the reason I did this, is that I work with many terminals.. some remote terminals, and some locals. And I want to throw lot of grenades on the remote terminals, but when I accidentally pull the safety seal on the local terminal, I want to see a warning before the explosion occurs. – Paschalis Jun 27 '14 at 13:04
  • @Paschalis and what happens if a script or installed program needs to use rm? Also, Caleb's point is even more valid -- if you get used to a system with safe-rm aliased, then you might get reckless with it and eventually use it on a system with an unaliased rm. – Manishearth Jul 3 '14 at 14:03

You must log in to answer this question.

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