1.0.4 • Published 5 years ago

@elcubonegro/compare_files v1.0.4

Weekly downloads
-
License
MIT
Repository
-
Last release
5 years ago

Compare File Lists in Node.js

I encouter a certain situation pretty frequently: I have a known set of files on my file system which I need to scan to compare them against the same (or a similar) set of files at a later point in time (i.e. "Did any of the files in this list change?" or "Did any of the files matching these criteria change?").

A quick example:

import glob from 'glob' // from the `glob` package

const images_now = glob.sync('/home/images/**/*.jpg')

// Later (maybe even days or weeks later)

const images_later = glob.sync('/home/images/**/*.jpg')

// Do the files in images_now and images_later differ in any way?

The script below tackles this problem in a way as read-performant as possible (i.e. scan once, compare potentially many times). It checks if there are any differences between an earlier file list and the current file system and returns the first difference it finds.

Note: The script uses ES modules (transpiling most likely needed) and needs the rev-hash package to be installed.

It works as follows:

Scan the Files

We need to create a profile of the files we're interested in:

import { profile } from './compare-files.js'

profile(glob.sync('/home/images/**/*.jpg'))

Calling profile() returns a plain JavaScript object. You may serialize and store it somewhere for later access.

Check for Changes

Comparing is the other way around: Read the stored profile and use diff():

import { diff } from './compare-files.js'

diff(
  glob.sync('/home/images/**/*.jpg'),
  referenceData // The object we obtained through profile() earlier
)

The diff() returns either null if no changes have occurred, or an object with a type (which is either added, removed or changed) and a file property pointing to the (first) according file.

For example:

{ type: 'added', file: 'new.jpg' }
// or
{ type: 'removed', file: 'no-longer-exists.jpg' }
// or
{ type: 'changed', file: 'photoshopped.jpg' }

Note: If a difference is found, don't forget to invalidate the old profile and create a new one if needed.

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago