binarykitchen / find-remove

recursively finds files by filter options from a start directory onwards and deletes these. useful if you want to clean up a directory in your node.js app.
https://npmjs.org/package/find-remove
61 stars 19 forks source link

find-remove

finally in typescript (since v5)

recursively finds files by filter options from a start directory onwards and deletes only those which meet conditions you can define. useful if you want to clean up a directory in your node.js app.

you can filter by extensions, names, level in directory structure, file creation date and ignore by name, yeah!

installation

to install find-remove, use npm:

$ npm install -S find-remove

then in your node.js app, get reference to the function like that:

import findRemoveSync from "find-remove";

quick examples

1. delete all .bak or .log files within the /temp/ directory

const result = findRemoveSync("/temp", { extensions: [".bak", ".log"] });

the return value result is a json object with successfully deleted files. if you output result to the console, you will get something like this:

{
    '/tmp/haumiblau.bak': true,
    '/tmp/dump.log': true
}

2. delete all files called 'dump.log' within the /temp/ directory and within its subfolders

const result = findRemoveSync("/temp", { files: "dump.log" });

3. same as above, but also deletes any subfolders

const result = findRemoveSync("/temp", { files: "dump.log", dir: "*" });

4. delete all *.bak files but not file 'haumiblau.bak'

const result = findRemoveSync("/temp", { extensions: [".bak"], ignore: "haumiblau.bak" });

5. delete recursively any subdirectory called 'CVS' within /dist/

const result = findRemoveSync("/dist", { dir: "CVS" });

6. delete all jpg files older than one hour with limit of 100 files deletion per operation

const result = findRemoveSync("/tmp", {
  age: { seconds: 3600 },
  extensions: ".jpg",
  limit: 100,
});

7. delete all files with prefix 'filenamestartswith'

const result = findRemoveSync("/tmp", { prefix: "filenamestartswith" });

8. apply filter options only for two levels inside the /temp directory for all tmp files

const result = findRemoveSync("/tmp", { maxLevel: 2, extensions: ".tmp" });

this deletes any .tmp files up to two levels, for example: /tmp/level1/level2/a.tmp

but not /tmp/level1/level2/level3/b.tmp

why the heck do we have this maxLevel option? because of performance. if you care about deep subfolders, apply that option to get a speed boost.

9. delete everything recursively (hey, who needs that when you can use nodejs' fs.unlink?)

const result = findRemoveSync(rootDirectory, { dir: "*", files: "*.*" });

10. delete all files that match a regular expression

const result = findRemoveSync(rootDirectory, { files: "example[1-3]", regex: true });

this deletes files example1.txt, example2.txt, and example3.txt, but not example8.txt.

11. delete all directories that match a regular expression

const result = findRemoveSync(rootDirectory, { dir: "^assets_", regex: true });

this deletes all directories that start with assets_.

api

findRemoveSync(dir, options)

findRemoveSync takes any start directory and searches files from there for removal. the selection of files for removal depends on the given options. and at last, it deletes the selected files/directories.

arguments

as a precaution, nothing happens when there are no options.

the unit tests are good examples on how to use the above arguments.

returns

JSON of files/directories that were deleted. For limit option - will only return number of files deleted.

todo

license

MIT