CLI for recursive-copy
Installation is as simple as running the following command
npm install -g recursive-copy-cli
recursive-copy <src> <dest>
Positionals:
src Source file/folder path [string]
dest Destination file/folder path [string]
Options:
--help Show help [boolean]
--version Show version number [boolean]
--overwrite, -w Whether to overwrite destination files [Default: false] [boolean]
--expand, -e Whether to expand symbolic links [Default: false] [boolean]
--dot, -d Whether to copy files beginning with a .(dot) [Default: false] [boolean]
--junk, -j Whether to copy OS junk files (e.g. .DS_Store, Thumbs.db) [Default: false] [boolean]
--filter, -f Filter regular expression / glob that determines which files to copy (uses maximatch) [array]
--transform-module, -t Function that returns a transform stream used to modify file contents [array]
--concurrency, -c Maximum number of simultaneous copy operations [Default: 255] [number]
--debug, -v Whether to log debug information [Default: false] [boolean]
--renameModule, -r renames source paths using the module [array]
--renamePattern, -p renames patterns in source paths. eg: :: - [array]
Examples:
recursive-copy srcPath destPath -r pascalcase Renames files using the pascalcase module
recursive-copy srcPath destPath -p '::' '-' Renames someFile::name.ext to someFile-name.ext
recursive-copy srcPath destPath -p '/(.*)-(.*)\.(.*)/g' '$2-$1.$3' Renames author-title.ext to title-author.ext
recursive-copy srcPath destPath -f '*.json' '/\*.js$/' Only Copies json & js files
recursive-copy srcPath destPath -f "*.js" -t some-transform-module modify the contents of js files
Use --no-<option> to toggle boolean options. eg: --no-overwrite or --no-w
When specifying a module, you could specify a global module, local module or provide the path to file.
eg: ./someFolder/pascalcase/index.js in case of file or node_modules/pascalcase in case of local module
For more help refer https://github.com/libinvarghese/recursive-copy-cli
$ recursive-copy source dest
source -> dest
source/a -> dest/a
source/b -> dest/b
source/c -> dest/c
4 item(s) copied
-
What is a transform module?
renameModule a function that renames the file name.
Refer examples/toupper.rename.module.mock.js
'use strict'; /** * @param src string Name of the file to rename * * @return renamed string */ module.exports = function toUpperCase(src) { return src.toUpperCase(); };
$ recursive-copy source dest -r examples/toupper.rename.module.mock.js source -> dest source/a -> dest/A source/b -> dest/B source/c -> dest/C 4 item(s) copied
Refer recursive-copy for more info regarding rename function
-
What is a transform module?
transform-module a function that transforms the content of the file
Refer examples/toupper.transform.module.mock.js
'use strict'; const through2 = require('through2'); /** * @param src string Name of the source file * @param dest string Name of the dest file * @param stats fs.Stats stats of the src file * * @return TransformStream */ module.exports = function caseTransform(src, _dest, _stats) { return through2(function (chunk, _encoding, callback) { this.push(chunk.toString().toUpperCase()); callback(); }); };
$ echo "Hello World" > testfile.txt $ recursive-copy testfile.txt transformedfile.txt -t examples/toupper.transform.module.mock.js testfile.txt -> transformedfile.txt 1 item(s) copied $ cat transformedfile.txt HELLO WORLD
Refer recursive-copy for more info regarding transform function.
-
Can I provide multiple modules?
Yes, you can pipe the result of one module into another.
recursive-copy srcPath destPath -r pascalcase ./path/to/a/renameModule.js recursive-copy srcPath destPath -t ./path/to/add-header-module.js ./path/to/change-eol-module.js