Using the "rm" Command with Trash

From Paritybit.ca Wiki

Introduction

Difficulty: Beginner

Those who use regular file browsers like Nautilus, Dolphin, or Thunar are used to having an item go into the Trash folder (or "Recycle Bin") when it is deleted. This allows them to restore that file in the case that they accidentally deleted it. However, the story is different on the command line. The rm command will irreversibly delete a file from your system (short of using data recovery techniques) and has no concept of a Trash folder. This guide will show you how to make rm remove a file to the Trash folder first so that you can prevent yourself from accidentally irreversibly deleting something really important.

Bash and Bash-like Shells

(This also works in fish shell)

alias rm='mv -t $XDG_DATA_HOME/Trash/'
alias rm!='\rm'

C Shell and TENEX C Shell

alias rm 'mv -t $XDG_DATA_HOME/Trash/'
alias rm! '\rm'

Explanation

The aliases above do the following:

  • Alias rm to mv where any files specified will be moved to the XDG standard trash folder instead of being deleted.
  • Alias rm! to the normal rm program which effectively makes rm! a "permanently delete this" command.

If you don't have $XDG_DATA_HOME defined (which you normally would if you're running a standard desktop like Gnome or KDE) you can replace that bit with whichever path you prefer such as $HOME/.Trash. The folder you choose must already exist or else mv will be angry.