Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
grunt-contrib-copy
Advanced tools
The grunt-contrib-copy package is a Grunt plugin that provides file copying capabilities. It allows you to copy files and directories from one location to another, which is useful for tasks such as preparing files for deployment, creating backups, or organizing project files.
Copying individual files
This feature allows you to copy a single file from a source location to a destination location. In this example, 'src/file1.txt' is copied to 'dest/file1.txt'.
{
"copy": {
"main": {
"src": "src/file1.txt",
"dest": "dest/file1.txt"
}
}
}
Copying multiple files
This feature allows you to copy multiple files by specifying an array of source and destination file paths. In this example, 'src/file1.txt' and 'src/file2.txt' are copied to 'dest/file1.txt' and 'dest/file2.txt' respectively.
{
"copy": {
"main": {
"files": [
{"src": "src/file1.txt", "dest": "dest/file1.txt"},
{"src": "src/file2.txt", "dest": "dest/file2.txt"}
]
}
}
}
Copying entire directories
This feature allows you to copy entire directories, including all subdirectories and files. The 'expand' option is set to true to enable dynamic building of the destination paths. The 'cwd' option specifies the current working directory, and 'src' specifies the pattern to match files. In this example, all files and directories under 'src/' are copied to 'dest/'.
{
"copy": {
"main": {
"expand": true,
"cwd": "src/",
"src": ["**"],
"dest": "dest/"
}
}
}
Flattening directory structure
This feature allows you to flatten the directory structure when copying files. The 'flatten' option is set to true, which means all files will be copied directly into the destination directory without preserving the directory structure. In this example, all files under 'src/' are copied directly into 'dest/'.
{
"copy": {
"main": {
"expand": true,
"cwd": "src/",
"src": ["**"],
"dest": "dest/",
"flatten": true
}
}
}
gulp-copy is a Gulp plugin that provides similar file copying capabilities as grunt-contrib-copy. It allows you to copy files and directories using Gulp tasks. Compared to grunt-contrib-copy, gulp-copy is used within the Gulp task runner ecosystem, which may be preferred by developers who use Gulp for their build processes.
cpx is a command-line tool and library for copying files and directories. It supports advanced features such as watching for changes and copying only modified files. Compared to grunt-contrib-copy, cpx can be used both as a standalone CLI tool and as a library within Node.js scripts, providing more flexibility in different environments.
ncp (Node Copy) is a Node.js module for copying files and directories. It provides a simple API for recursive copying and supports various options for filtering and transforming files during the copy process. Compared to grunt-contrib-copy, ncp is a lower-level library that can be used directly in Node.js scripts without relying on a task runner like Grunt.
Copy files and folders
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.
Run this task with the grunt copy
command.
Task targets, files and options may be specified according to the grunt Configuring tasks guide.
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.
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.
Type: String
Default: grunt.file.defaultEncoding
The file encoding to copy files with.
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.
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.
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.
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.
chalk
dependency.mode
option now also applies to directories. Fix path issue on Windows.--verbose
.Task submitted by Chris Talkington
This file was generated on Fri Mar 04 2016 15:50:24.
FAQs
Copy files and folders
The npm package grunt-contrib-copy receives a total of 220,122 weekly downloads. As such, grunt-contrib-copy popularity was classified as popular.
We found that grunt-contrib-copy demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 6 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.