Small module to mirror a folder to another folder. Supports live mode as well.
npm install mirror-folder[![npm][npm-image]][npm-url]
[![travis][travis-image]][travis-url]
Small module to mirror a folder to another folder.
Supports watch mode as well where it will continuously watch the src folder and mirror new entries as they are created/removed.
```
npm install mirror-folder
` js
var mirror = require('mirror-folder')
mirror('/Users/maf/cool-stuff', '/Users/maf/cool-stuff-mirror', function (err) {
if (err) throw err
console.log('Folder was mirrored')
})
`
#### var progress = mirror(src, dst, [options], [callback])
Mirror src to dst. Returns a progress event emitter.
Options include:
` js`
{
watch: false, // keep watching the src and mirror new entries, can also be a custom watch function
dereference: false, // dereference any symlinks
equals: fun, // optional function to determine if two entries are the same, see below
ignore: null, // optional async function to ignore file paths on src or dest
dryRun: false, // emit all events but don't write/del files,
keepExisting: false, // whether to delete extra files in the destination that are not present in the source
skipSpecial: true // skip any files that are not regular files,
ensureParents: false // ensure that all parent directories exist before creating children.
}
The equals function looks like this:
` js`
function equals (src, dst, cb) {
console.log('src.name', src.name)
console.log('src.stat', src.stat)
console.log('dst.name', dst.name)
console.log('dst.stat', dst.stat)
cb(null, true) // callback with true if they are the same or false if not
}
Per default the equals function will check if mtime is larger on the src entry or if the size is different
The ignore function looks like this:
` js`
function ignore (file, cb) {
// ignore any files with secret in them
if (file.indexOf('secret') > -1) return process.nextTick(cb, null, true)
return process.nextTick(cb, null, false)
}
If you want to use a custom watch function on the src fs, the watch option should take the form:`js`
var unwatch = function watch (path, onwatch) { ... }
If you are using a custom fs module (like graceful-fs) you can pass that in
with the src or dst like this:
` js`
mirror({name: '/Users/maf/cool-stuff', fs: customFs}, {name: '/Users/maf/cool-stuff-mirror', fs: anotherFs})
#### progress.on('pending', {name, live})
Emitted when file/dir added to pending queue.
#### progress.pending
Array of items pending to be processed.
#### progress.on('put', src, dst)
Emitted when a file/folder is copied from the src to the dst folder.
#### progress.on('put-data', data)
Emitted when a file chunk is read from the src.
#### progress.on('put-end', src, dst)
Emitted at the end of a write stream (files only).
#### progress.on('del', dst)
Emitted when a file/folder is deleted from the dst folder.
#### progress.on('ignore', src, dst)
Emitted when a file/folder is ignored (either src or dst).
#### progress.on('skip', src, dst)
Emitted when a file/folder is skipped. Either src file already is equal to dst file or file does not exist in either place.
#### progress.on('end')
Emitted when the mirror ends (not emitted in watch mode). The mirror callback is called when this event is emitted as well
#### progress.on('error', err)
Emitted when a critical error happens. If you pass a mirror callback you don't need to listen for this.
#### progress.destroy()`
Stop mirroring files. If using watch mode, close the file watcher.
MIT
[npm-image]: https://img.shields.io/npm/v/mirror-folder.svg?style=flat-square
[npm-url]: https://www.npmjs.com/package/mirror-folder
[travis-image]: https://img.shields.io/travis/mafintosh/mirror-folder.svg?style=flat-square
[travis-url]: https://travis-ci.org/mafintosh/mirror-folder