Delete files and directories using globs
Similar to rimraf, but with a Promise API and support for multiple files and globbing. It also protects you against deleting the current working directory and above.
npm install delimport{deleteAsync}from'del';constdeletedFilePaths=awaitdeleteAsync(['temp/*.js','!temp/unicorn.js']);constdeletedDirectoryPaths=awaitdeleteAsync(['temp','public']);console.log('Deleted files:\n',deletedFilePaths.join('\n'));console.log('\n\n');console.log('Deleted directories:\n',deletedDirectoryPaths.join('\n'));The glob pattern ** matches all children and the parent.
So this won't work:
deleteSync(['public/assets/**','!public/assets/goat.png']);You have to explicitly ignore the parent directories too:
deleteSync(['public/assets/**','!public/assets','!public/assets/goat.png']);To delete all subdirectories inside public/, you can do:
deleteSync(['public/*/']);Suggestions on how to improve this welcome!
Note that glob patterns can only contain forward-slashes, not backward-slashes. Windows file paths can use backward-slashes as long as the path does not contain any glob-like characters, otherwise use path.posix.join() instead of path.join().
Returns Promise<string[]> with the deleted paths.
Returns string[] with the deleted paths.
Type: string | string[]
See the supported glob patterns.
Type: object
You can specify any of the globby options in addition to the below options. In contrast to the globby defaults, expandDirectories, onlyFiles, and followSymbolicLinks are false by default.
Type: boolean
Default: false
Allow deleting the current working directory and outside.
Type: boolean
Default: false
See what would be deleted.
import{deleteAsync}from'del';constdeletedPaths=awaitdeleteAsync(['temp/*.js'],{dryRun: true});console.log('Files and directories that would be deleted:\n',deletedPaths.join('\n'));Type: boolean
Default: false
Allow patterns to match files/folders that start with a period (.).
This option is passed through to fast-glob.
Note that an explicit dot in a portion of the pattern will always match dot files.
Example
directory/
├── .editorconfig
└── package.json
import{deleteSync}from'del';deleteSync('*',{dot: false});//=> ['package.json']deleteSync('*',{dot: true});//=> ['.editorconfig', 'package.json']Type: number
Default: Infinity
Minimum: 1
Concurrency limit.
Type: (progress: ProgressData) => void
Called after each file or directory is deleted.
import{deleteAsync}from'del';awaitdeleteAsync(patterns,{onProgress: progress=>{// …}});{totalCount: number,deletedCount: number,percent: number,path?: string}percentis a value between0and1pathis the absolute path of the deleted file or directory. It will not be present if nothing was deleted.
See del-cli for a CLI for this module and trash-cli for a safe version that is suitable for running by hand.