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 🙏

© 2024 – Pkg Stats / Ryan Hefner

shredfile

v1.1.0

Published

A simple wrapper to the Unix shred command.

Downloads

718

Readme

NPM Version NPM Downloads Node.js Version Build Status

NodeJS Secure File Removal Utility

Use Node JS to securely delete files on your server with Unix's shred command. You really don't need this module if the machine your running your project on is not using a tranditional mechanical hard drive. In other words, if the file you want to securely delete is on solid state storage, there's no need to use this module and, in fact, it could actually be unnecessarily shortening the life of that disk to use it.

NOTE: This module is not designed to work on Windows but may work on WSL. Your mileage may vary.

How to Install

With NPM:

npm install shredfile

With Yarn:

yarn add shredfile

License info

Licensed under the MIT License:

Getting Started

All of the values listed in the example below represent the default values for their respective configuration item.

You can simply do this:

const ShredFile = require('shredfile');
const shredder = new ShredFile();

And, you'll be good to go.

BUT: If you want more control, you can specify all sorts of options.

const ShredFile = require('shredfile');
const shredder = new ShredFile({
    shredPath: '/usr/bin/shred', // Path to shred binary on your server
    force: false, // If true, changes permissions of the file(s) to allow writing if necessary
    iterations: 3, // How many times to overwrite the file
    bytes: null, // If specified, it will shred to specified bytes and then stop
    remove: true, // If true, removes (unlinks) file(s) after shredding
    zero: true, // If true, adds final overwrite with zeros to hide shredding
    debugMode: false // Whether or not to log info/debug/error msgs to the console
});

Here is a non-default values example (to help you get an idea of what some proper-looking alternate values could be):

const ShredFile = require('shredfile');
const shredder = new ShredFile({
    shredPath: '/usr/local/bin/shred', // Maybe yours is located here
    force: true, // You do want to change permissions to force writing
    iterations: 25, // You wear a tinfoil hat at all times, so, naturally, write over the file 25 times.
    bytes: '70M', // You're shredding the first 70 MB of the file only.
    remove: false, // You want to shred the file but keep it there for some reason.
    zero: false, // You don't care about hiding the fact that you shredded the file.
    debugMode: true // You want to know everything that happened.
});

API

.shred(files, statusCb, endCb)

This method allows you to shred a one or many files.

Parameters

  • files required (string or array) A path (string) or list paths (array) to file(s) you want to be shredded.
  • statusCb (function) Will be called everytime the status of a file is changed (ex. renaming and each overwrite iteration). It takes 4 parameters:
    • action (string) This will be either 'overwriting' or 'renaming'
    • progress (float) The percentage of the specific action that is complete (ex. 0.66)
    • file (string) File name of the file that is currently being acted upon
    • activeFilePath (string) Full path to the file that is currently being acted upon (does not include file name)
  • endCb (function) Will be called when the shred is complete. It takes 2 parameters:
    • err (string or null) A standard error message string (null if no error)
    • file (string) The original files parameter passed into this shred method.

Examples

Single File (Callback Style)
shredder.shred('/a/picture/for_example.jpg', (err, file) => {
    if (err) return console.error(err);
    console.log("File has been shredded!");
});
Single File (Async/Await)
async function doShred() {
    try {
        const file = await shredder.shred('/a/picture/for_example.jpg');
        console.log('Shredded File: ', file);
    } catch (err) [
        console.error(err);
    }
}

doShred();
Multiple Files (with status callback) - Callback Style
const files = ['/a/picture/for_example.jpg','/a/different/file.dat'];
shredder.shred(files, (action, progress, file, path) => {
    progress = (Math.round((progress * 10000)) / 100);
    console.log(`${action} ${file}: ${progress}%`);
}, (err, file) => {
    if (err) return console.error(err);
    console.log("Files have been shredded!");
});
Multiple Files (with status callback) - Promise Style
const files = ['/a/picture/for_example.jpg','/a/different/file.dat'];
shredder.shred(files, (action, progress, file, path) => {
    progress = (Math.round((progress * 10000)) / 100);
    console.log(`${action} ${path}/${file}: ${progress}%`);
}).then((files) => {
    console.log('Files have been shredded!', files);
}).catch((err) => {
    console.error(err);
});