npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

safe-rm

v3.1.2

Published

A much safer replacement of bash rm with nearly full functionalities and options of the rm command!

Downloads

147

Readme

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 on Mac OS X and has been continuously used by myself since then, with later testing conducted on Linux. If you encounter any issues during use, please feel free to submit an issue.

Features

  • Supports both MacOS and Linux with full test coverage.
  • Using safe-rm, the files or directories you choose to remove will be moved to the system Trash instead of simply deleting them. You could put them back whenever you want manually.
    • On MacOS, safe-rm will use AppleScript to delete files or directories as much as possible to enable the built-in "put-back" capability in the system Trash bin.
    • On Linux, it also follows the operating system's conventions for handling duplicate files in the Trash to avoid overwriting
  • Supports Custom configurations.

Supported options

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

| Option | Brief | Description | | ------ | ----- | ------------ | | -i, --interactive | Interactive | Prompts you to confirm before removing each file | | -I, --interactive=once | Less Interactive | Prompts only once before removing more than three files or when recursively removing directories | | -f, --force | Force | Removes files without prompting for confirmation, ignoring nonexistent files and overriding file protections | | -r, -R, --recursive, --Recursive | Recursive | Removes directories and their contents recursively. Required for deleting directories | | -v, --verbose | Verbose | Displays detailed information about each file or directory being removed | | -d, '--directory' | Remove Empty Directories | safe-rm can check and only remove empty directories specifically with this flag | | -- | End of Options | Used 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

  • defining your custom trash directory
  • allowing safe-rm to permanently delete files and directories that are already in the trash
  • disallowing safe-rm to use AppleScript

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 Trash 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:

  • Before adding protected rules, i.e. placing the ".gitignore" inside the "~/.safe-rm/" directory, it requires git to be installed in your environment
  • The ".gitignore" patterns apply to the root directory ("/"), which means that the patterns defined within it need to be relative to the root directory.
  • Avoid adding / in the protected rules file, or everything will be protected