Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mafintosh/mirror-folder
Small module to mirror a folder to another folder. Supports live mode as well.
https://github.com/mafintosh/mirror-folder
Last synced: 13 days ago
JSON representation
Small module to mirror a folder to another folder. Supports live mode as well.
- Host: GitHub
- URL: https://github.com/mafintosh/mirror-folder
- Owner: mafintosh
- License: mit
- Created: 2017-03-24T09:54:43.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2020-04-28T23:16:36.000Z (over 4 years ago)
- Last Synced: 2024-10-23T10:34:05.569Z (21 days ago)
- Language: JavaScript
- Size: 48.8 KB
- Stars: 87
- Watchers: 5
- Forks: 26
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-dat - mirror-folder - Small module to mirror a folder to another folder. Supports live mode as well. (Using Dat / File Imports & Exports)
README
# 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
```## Usage
``` 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')
})
```## API
#### `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](https://github.com/isaacs/node-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.
## License
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