Home

Awesome

safe-rm

 _______  _______  _______  _______         ______    __   __
|       ||   _   ||       ||       |       |    _ |  |  |_|  |
|  _____||  |_|  ||    ___||    ___| ____  |   | ||  |       |
| |_____ |       ||   |___ |   |___ |____| |   |_||_ |       |
|_____  ||       ||    ___||    ___|       |    __  ||       |
 _____| ||   _   ||   |    |   |___        |   |  | || ||_|| |
|_______||__| |__||___|    |_______|       |___|  |_||_|   |_|

Build Status

Safe-rm, a drop-in and much safer replacement of the unix rm command with ALMOST FULL features of the original rm.

The project was initially developed for Mac OS X, and then tested on Linux.

Features

Supported options

For those implemented options, safe-rm will act exactly the same as the original rm command:

OptionBriefDescription
-i, --interactiveInteractivePrompts you to confirm before removing each file
-I, --interactive=onceLess InteractivePrompts only once before removing more than three files or when recursively removing directories
-f, --forceForceRemoves files without prompting for confirmation, ignoring nonexistent files and overriding file protections
-r, -R, --recursive, --RecursiveRecursiveRemoves directories and their contents recursively. Required for deleting directories
-v, --verboseVerboseDisplays detailed information about each file or directory being removed
-d, '--directory'Remove Empty Directoriessafe-rm can check and only remove empty directories specifically with this flag
--End of OptionsUsed to indicate the end of options. Useful if a filename starts with a -

Combined short options are also supported, such as

-rf, -riv, -rfv, etc

Usual Installation

Add an alias to your ~/.bashrc script,

alias rm='/path/to/bin/rm.sh'

and /path/to is where you git clone shell-safe-rm in your local machine.

Permanent Installation

If you have NPM (NodeJS) installed (RECOMMENDED):

npm i -g safe-rm

Or by using the source code, within the root of the current repo (not recommended, may be unstable):

# If you have NodeJS installed
npm link

# If you don't have NodeJS or npm installed
make && sudo make install

# For those who have no `make` command:
sudo sh install.sh

Installing safe-rm will put safe-rm in your /bin directory. In order to use safe-rm, you need to add an alias to your ~/.bashrc script and in all yours currently open terminals, like this:

alias rm='safe-rm'

After installation and alias definition, when you execute rm command in the Terminal, lines of below will be printed:

$ rm
safe-rm
usage: rm [-f | -i] [-dPRrvW] file ...
     unlink file

which helps to tell safe-rm from the original rm.

Uninstall

First remove the alias rm=... line from your ~/.bashrc file, then

npm uninstall -g safe-rm

Or

make && sudo make uninstall

Or

sudo sh uninstall.sh

Advanced Sections

Configuration

Since 3.0.0, you could create a configuration file located at ~/.safe-rm/config in your $HOME directory, to support

For the description of each config, you could refer to the sample file here

# You could
cp -r ./.safe-rm ~/

If you want to use a custom configuration file

alias="SAFE_RM_CONFIG=/path/to/safe-rm.conf /path/to/shell-safe-rm/bin/rm.sh"

Or if it is installed by npm:

alias="SAFE_RM_CONFIG=/path/to/safe-rm.conf safe-rm"

Disable Put-back Functionality on MacOS (MacOS only)

In ~/.safe-rm/config

export SAFE_RM_USE_APPLESCRIPT=no

By default, on MacOS, safe-rm uses AppleScript as much as possible so that removed files could be put back from system Trash app.

Change the Default Trach Bin Other Than System Default

export SAFE_RM_TRASH=/path/to/trash

Permanent Delete Files or Directories that Are Already in the Trash

export SAFE_RM_PERM_DEL_FILES_IN_TRASH=yes

Protect Files And Directories From Deleting

If you want to protect some certain files or directories from deleting by mistake, you could create a .gitignore file under the "~/.safe-rm/" directory, you could write .gitignore rules inside the file.

If a path is matched by the rules that defined in ~/.safe-rm/.gitignore, the path will be protected and could not be deleted by safe-rm

For example, in the ~/.safe-rm/.gitignore

/path/to/be/protected

And when executing

$ safe-rm /path/to/be/protected           # or
$ safe-rm /path/to/be/protected/foo       # or
$ safe-rm -rf /path/to/be/protected/bar

# An error will occur

But pay attention that, by adding the protected pattern above, if we:

$ safe-rm -rf /path/to

To keep the performance of safe-rm and avoid conducting unnecessary file system traversing, this would not prevent /path/to/be/protected/foo from removing.

Pay ATTENTION that: