A deep deletion module for node (like `rm -rf`)
npm install rimrafThe UNIX command>) rm -rf for node
in a cross-platform implementation.
Install with npm install rimraf.
- Require node 20 or >=22
- Add --version to CLI
- There is no default export anymore. Import the functions directly
using, e.g., import { rimrafSync } from 'rimraf'.
- The function returns a Promise instead of taking a callback.
- Globbing requires the --glob CLI option or glob option property
to be set. (Removed in 4.0 and 4.1, opt-in support added in 4.2.)
- Functions take arrays of paths, as well as a single path.
- Native implementation used by default when available, except on
Windows, where this implementation is faster and more reliable.
- New implementation on Windows, falling back to "move then
remove" strategy when exponential backoff for EBUSY fails to
resolve the situation.
- Simplified implementation on POSIX, since the Windows
affordances are not necessary there.
- As of 4.3, return/resolve value is boolean instead of undefined.
Hybrid module, load either with import or require().
``js`
// 'rimraf' export is the one you probably want, but other
// strategies exported as well.
import { rimraf, rimrafSync, native, nativeSync } from 'rimraf'
// or
const { rimraf, rimrafSync, native, nativeSync } = require('rimraf')
All removal functions return a boolean indicating that all
entries were successfully removed.
The only case in which this will not return true is iffilter
something was omitted from the removal via a option.
This first parameter is a path or array of paths. The second
argument is an options object.
Options:
- preserveRoot: If set to boolean false, then allow thetmp
recursive removal of the root directory. Otherwise, this is
not allowed.
- : Windows only. Temp folder to place files andos.tmpdir()
folders for the "move then remove" fallback. Must be on the
same physical device as the path being deleted. Defaults to
when that is on the same drive letter as the path${drive}:\temp
being deleted, or if present, or ${drive}:\maxRetries
if not.
- : Windows and Native only. Maximum number ofEBUSY
retry attempts in case of , EMFILE, and ENFILE10
errors. Default for Windows implementation, 0 for Nativebackoff
implementation.
- : Windows only. Rate of exponential backoff for asyncEBUSY
removal in case of , EMFILE, and ENFILE errors.1.2
Should be a number greater than 1. Default maxBackoff
- : Windows only. Maximum total backoff time in ms toEBUSY
attempt asynchronous retries in case of , EMFILE, andENFILE
errors. Default 200. With the default 1.2 backoffretryDelay
rate, this results in 14 retries, with the final retry being
delayed 33ms.
- : Native only. Time to wait between retries, using100
linear backoff. Default .signal
- Pass in an AbortSignal to cancel the directory
removal. This is useful when removing large folder structures,
if you'd like to limit the time spent.
Using a signal option prevents the use of Node's built-infs.rm
because that implementation does not support abort
signals.
- glob Boolean flag to treat path as glob pattern, or an objectglob
specifying options.filter
- Method that returns a boolean indicating whether thatrimraf
path should be deleted. With async methods, this may
return a Promise that resolves to a boolean. (Since Promises
are truthy, returning a Promise from a sync filter is the same
as just not filtering anything.)
The first argument to the filter is the path string. The
second argument is either a Dirent or Stats object for thatStats
path. (The first path explored will be a , the restDirent
will be .)
If a filter method is provided, it will _only_ remove entries
if the filter returns (or resolves to) a truthy value. Omitting
a directory will still allow its children to be removed, unless
they are also filtered out, but any parents of a filtered entry
will not be removed, since the directory will not be empty in
that case.
Using a filter method prevents the use of Node's built-in
fs.rm because that implementation does not support filtering.
Any other options are provided to the native Node.js fs.rm implementation
when that is used.
This will attempt to choose the best implementation, based on the Node.js
version and process.platform. To force a specific implementation, use
one of the other functions provided.
Synchronous form of rimraf()
Note that, unlike many file system operations, the synchronous form will
typically be significantly _slower_ than the async form, because recursive
deletion is extremely parallelizable.
Uses the built-in fs.rm implementation that Node.js provides. This is14.14.0
used by default on Node.js versions greater than or equal to .
Synchronous form of rimraf.native
Use the JavaScript implementation appropriate for your operating system.
Synchronous form of rimraf.manual()
JavaScript implementation of file removal appropriate for Windows
platforms. Works around unlink and rmdir not being atomicEPERM
operations, and when deleting files with certain
permission modes.
First deletes all non-directory files within the tree, and then
removes all directories, which should ideally be empty by that
time. When an ENOTEMPTY is raised in the second pass, fallsrimraf.moveRemove
back to the strategy as needed.
Synchronous form of rimraf.windows()
Moves all files and folders to the parent directory of path
with a temporary filename prior to attempting to remove them.
Note that, in cases where the operation fails, this _may_ leave
files lying around in the parent directory with names like
.file-basename.txt.0.123412341. Until the Windows kernelunlink
provides a way to perform atomic and rmdir operations,
this is, unfortunately, unavoidable.
To move files to a different temporary directory other than the
parent, provide opts.tmp. Note that this _must_ be on the same
physical device as the folder being deleted, or else the
operation will fail.
This is the slowest strategy, but most reliable on Windows
platforms. Used as a last-ditch fallback by rimraf.windows().
Synchronous form of rimraf.moveRemove()
`
rimraf version 6.0.1
Usage: rimraf
Deletes all files and folders at "path", recursively.
Options:
-- Treat all subsequent arguments as paths
-h --help Display this usage info
--version Display version
--preserve-root Do not remove '/' recursively (default)
--no-preserve-root Do not treat '/' specially
-G --no-glob Treat arguments as literal paths, not globs (default)
-g --glob Treat arguments as glob patterns
-v --verbose Be verbose when deleting files, showing them as
they are removed. Not compatible with --impl=native
-V --no-verbose Be silent when deleting files, showing nothing as
they are removed (default)
-i --interactive Ask for confirmation before deleting anything
Not compatible with --impl=native
-I --no-interactive Do not ask for confirmation before deleting
--impl=
rimraf: choose the best option (default)
native: the built-in implementation in Node.js
manual: the platform-specific JS implementation
posix: the Posix JS implementation
windows: the Windows JS implementation (falls back to
move-remove on ENOTEMPTY)
move-remove: a slow reliable Windows fallback
Implementation-specific options:
--tmp=
--max-retries=
--retry-delay=
--backoff=
``
If you need to _create_ a directory recursively, check out
mkdirp.