grunt-contrib-copy v1.0.0
Copy files and folders
Getting Started
If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
npm install grunt-contrib-copy --save-dev
Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
grunt.loadNpmTasks('grunt-contrib-copy');
This plugin was designed to work with Grunt 0.4.x. If you're still using grunt v0.3.x it's strongly recommended that you upgrade, but in case you can't please use v0.3.2.
Copy task
Run this task with the grunt copy
command.
Task targets, files and options may be specified according to the grunt Configuring tasks guide.
Options
process
Type: Function(content, srcpath)
This option is passed to grunt.file.copy
as an advanced way to control the file contents that are copied.
processContent
has been renamed to process
and the option name will be removed in the future.
noProcess
Type: String
This option is passed to grunt.file.copy
as an advanced way to control which file contents are processed.
processContentExclude
has been renamed to noProcess
and the option name will be removed in the future.
encoding
Type: String
Default: grunt.file.defaultEncoding
The file encoding to copy files with.
mode
Type: Boolean
or String
Default: false
Whether to copy or set the destination file and directory permissions.
Set to true
to copy the existing file and directories permissions.
Or set to the mode, i.e.: 0644
, that copied files will be set to.
timestamp
Type: Boolean
Default: false
Whether to preserve the timestamp attributes(atime
and mtime
) when copying files. Set to true
to preserve files timestamp. But timestamp will not be preserved when the file contents or name are changed during copying.
Usage Examples
copy: {
main: {
files: [
// includes files within path
{expand: true, src: ['path/*'], dest: 'dest/', filter: 'isFile'},
// includes files within path and its sub-directories
{expand: true, src: ['path/**'], dest: 'dest/'},
// makes all src relative to cwd
{expand: true, cwd: 'path/', src: ['**'], dest: 'dest/'},
// flattens results to a single level
{expand: true, flatten: true, src: ['path/**'], dest: 'dest/', filter: 'isFile'},
],
},
},
This task supports all the file mapping format Grunt supports. Please read Globbing patterns and Building the files object dynamically for additional details.
Here are some additional examples, given the following file tree:
$ tree -I node_modules
.
βββ Gruntfile.js
βββ src
βββ a
βββ subdir
βββ b
2 directories, 3 files
Copy a single file tree:
copy: {
main: {
expand: true,
src: 'src/*',
dest: 'dest/',
},
},
$ grunt copy
Running "copy:main" (copy) task
Created 1 directories, copied 1 files
Done, without errors.
$ tree -I node_modules
.
βββ Gruntfile.js
βββ dest
βΒ Β βββ src
βΒ Β βββ a
βΒ Β βββ subdir
βββ src
βββ a
βββ subdir
βββ b
5 directories, 4 files
Copying without full path:
copy: {
main: {
expand: true,
cwd: 'src',
src: '**',
dest: 'dest/',
},
},
$ grunt copy
Running "copy:main" (copy) task
Created 2 directories, copied 2 files
Done, without errors.
$ tree -I node_modules
.
βββ Gruntfile.js
βββ dest
β βββ a
β βββ subdir
β βββ b
βββ src
βββ a
βββ subdir
βββ b
5 directories, 5 files
Flattening the filepath output:
copy: {
main: {
expand: true,
cwd: 'src/',
src: '**',
dest: 'dest/',
flatten: true,
filter: 'isFile',
},
},
$ grunt copy
Running "copy:main" (copy) task
Copied 2 files
Done, without errors.
$ tree -I node_modules
.
βββ Gruntfile.js
βββ dest
βΒ Β βββ a
βΒ Β βββ b
βββ src
βββ a
βββ subdir
βββ b
3 directories, 5 files
Copy and modify a file:
To change the contents of a file as it is copied, set an options.process
function as follows:
copy: {
main: {
src: 'src/a',
dest: 'src/a.bak',
options: {
process: function (content, srcpath) {
return content.replace(/[sad ]/g, '_');
},
},
},
},
Here all occurrences of the letters "s", "a" and "d", as well as all spaces, will be changed to underlines in "a.bak". Of course, you are not limited to just using regex replacements.
To process all files in a directory, the process
function is used in exactly the same way.
NOTE: If process
is not working, be aware it was called processContent
in v0.4.1 and earlier.
Troubleshooting
By default, if a file or directory is not found it is quietly ignored. If the file should exist, and non-existence generate an error, then add nonull:true
. For instance, this Gruntfile.js entry:
copy: {
main: {
nonull: true,
src: 'not-there',
dest: 'create-me',
},
},
gives this output:
$ grunt copy
Running "copy:main" (copy) task
Warning: Unable to read "not-there" file (Error code: ENOENT). Use --force to continue.
Aborted due to warnings.
Release History
- 2016-03-04βββv1.0.0βββBump devDependencies. Add example of using relative path. Point main to task and remove peerDeps.
- 2015-10-19βββv0.8.2βββFix expand-less copies with multiple files.
- 2015-08-20βββv0.8.1βββUpdate
chalk
dependency. - 2015-02-20βββv0.8.0βββPerformance improvements. The
mode
option now also applies to directories. Fix path issue on Windows. - 2014-10-15βββv0.7.0βββAdd timestamp option to disable preserving timestamp when copying.
- 2014-09-17βββv0.6.0βββUpdate chalk dependency and other devDependencies. Preserve file timestamp when copying.
- 2013-12-23βββv0.5.0βββIf an encoding is specified, overwrite
grunt.file.defaultEncoding
. RenameprocessContent
/processContentExclude
toprocess
/noProcess
to match Grunt API.mode
option to copy existing or set file permissions. - 2013-03-26βββv0.4.1βββOutput summary by default ("Copied N files, created M folders"). Individual transaction output available via
--verbose
. - 2013-02-15βββv0.4.0βββFirst official release for Grunt 0.4.0.
- 2013-01-23βββv0.4.0rc7βββUpdating grunt/gruntplugin dependencies to rc7. Changing in-development grunt/gruntplugin dependency versions from tilde version ranges to specific versions.
- 2013-01-14βββv0.4.0rc5βββUpdating to work with grunt v0.4.0rc5. Conversion to grunt v0.4 conventions. Replace
basePath
withcwd
. Empty directory support. - 2012-10-18βββv0.3.2βββPass
copyOptions
on single file copy. - 2012-10-12βββv0.3.1βββRename grunt-contrib-lib dep to grunt-lib-contrib.
- 2012-09-24βββv0.3.0βββGeneral cleanup and consolidation. Global options depreciated.
- 2012-09-18βββv0.2.4βββNo valid source check.
- 2012-09-17βββv0.2.3βββ
path.sep
fallback for Node.js <= 0.7.9. - 2012-09-17βββv0.2.2βββSingle file copy support. Test refactoring.
- 2012-09-07βββv0.2.0βββRefactored from grunt-contrib into individual repo.
Task submitted by Chris Talkington
This file was generated on Thu Apr 07 2016 15:11:09.