copy files on the command line
Latest commit 872f7b5 Dec 19, 2017
andrew authored and calvinmetcalf committed Dec 19, 2017 Update license field in package.json to match LICENSE file (#31)
MIT instead of ISC

copyfiles Build Status

copy files easily


npm install copyfiles -g

Command Line

  Usage: copyfiles [options] inFile [more files ...] outDirectory


    -h, --help               output usage information
    -V, --version            output the version number
    -u, --up [levels]        slice a path off the bottom of the paths
    -a --all                 include files and directories whose names begin with a dot (.)
    -f, --flat               flatten the output
    -e, --exclude [pattern]  pattern or glob to exclude
    -s, --soft               do not overwrite destination files if they exist

copy some files, give it a bunch of arguments, (which can include globs), the last one is the out directory (which it will create if necessary). Note: on windows globs must by double quoted, everybody else can quote however they please.

copyfiles foo foobar foo/bar/*.js out

you now have a directory called out, with the files foo and foobar in it, it also has a directory named foo with a directory named bar in it that has all the files from foo/bar that match the glob.

If all the files are in a folder that you don't want in the path out path, ex:

copyfiles something/*.js out

which would put all the js files in out/something, you can use the --up (or -u) option

copyfiles -u 1 something/*.js out

which would put all the js files in out

you can also just do -f which will flatten all the output into one directory, so with files ./foo/a.txt and ./foo/bar/b.txt

copyfiles -f ./foo/*.txt ./foo/bar/*.txt out

will put a.txt and b.txt into out

if your terminal doesn't support globstars then you can quote them

copyfiles -f ./foo/**/*.txt out

does not work by default on a mac


copyfiles -f "./foo/**/*.txt" out


You could quote globstars as a part of input:

copyfiles some.json "./some_folder/*.json" ./dist/ && echo 'JSON files copied.'

You can use the -e option to exclude some files from the pattern, so to exclude all all files ending in .test.js you could do

copyfiles -e "**/*.test.js" -f ./foo/**/*.js out

Other options include

  • -a or --all which includes files that start with a dot.
  • -s or --soft to soft copy, which will not overwrite existing files.


also creates a copyup command which is identical to copyfiles but -up defaults to 1

Programic API

var copyfiles = require('copyfiles');

copyfiles([paths], opt, callback);

takes an array of paths, last one is the destination path, also takes an optional argument which the -u option if a number, otherwise if it's true it's the flat option.