
Company News
Andrew Becherer Joins Socket as Chief Information Security Officer
Socket’s first CISO brings deep experience securing high-growth SaaS companies as open source supply chain threats accelerate.
@11ty/recursive-copy
Advanced tools
@11ty/recursive-copyA temporary fork of timkendrick/recursive-copy to satisfy https://github.com/11ty/eleventy/issues/3299 as Eleventy slowly moves to use Node native API fs.cp.
Simple, flexible file copy utility
var copy = require('@11ty/recursive-copy');
copy('src', 'dest', function(error, results) {
if (error) {
console.error('Copy failed: ' + error);
} else {
console.info('Copied ' + results.length + ' files');
}
});
var copy = require('@11ty/recursive-copy');
copy('src', 'dest')
.then(function(results) {
console.info('Copied ' + results.length + ' files');
})
.catch(function(error) {
console.error('Copy failed: ' + error);
});
import copy from '@11ty/recursive-copy';
try {
const results = await copy('src', 'dest');
console.info('Copied ' + results.length + ' files');
} catch (error) {
console.error('Copy failed: ' + error);
}
var copy = require('@11ty/recursive-copy');
var path = require('path');
var through = require('through2');
var options = {
overwrite: true,
expand: true,
dot: true,
junk: true,
filter: [
'**/*',
'!.htpasswd'
],
rename: function(filePath) {
return filePath + '.orig';
},
transform: function(src, dest, stats) {
if (path.extname(src) !== '.txt') { return null; }
return through(function(chunk, enc, done) {
var output = chunk.toString().toUpperCase();
done(null, output);
});
}
};
copy('src', 'dest', options)
.on(copy.events.COPY_FILE_START, function(copyOperation) {
console.info('Copying file ' + copyOperation.src + '...');
})
.on(copy.events.COPY_FILE_COMPLETE, function(copyOperation) {
console.info('Copied to ' + copyOperation.dest);
})
.on(copy.events.ERROR, function(error, copyOperation) {
console.error('Unable to copy ' + copyOperation.dest);
})
.then(function(results) {
console.info(results.length + ' file(s) copied');
})
.catch(function(error) {
return console.error('Copy failed: ' + error);
});
copy(src, dest, [options], [callback])Recursively copy files and folders from src to dest
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
src | string | Yes | N/A | Source file/folder path |
dest | string | Yes | N/A | Destination file/folder path |
options.overwrite | boolean | No | false | Whether to overwrite destination files |
options.expand | boolean | No | false | Whether to expand symbolic links |
options.dot | boolean | No | false | Whether to copy files beginning with a . |
options.junk | boolean | No | false | Whether to copy OS junk files (e.g. .DS_Store, Thumbs.db) |
options.filter | function, RegExp, string, array | No | null | Filter function / regular expression / glob that determines which files to copy (uses maximatch) |
options.rename | function | No | null | Function that maps source paths to destination paths |
options.transform | function | No | null | Function that returns a transform stream used to modify file contents |
options.results | boolean | No | true | Whether to return an array of copy results |
options.concurrency | number | No | 255 | Maximum number of simultaneous copy operations |
options.debug | boolean | No | false | Whether to log debug information |
callback | function | No | null | Callback, invoked on success/failure |
Promise<Array> Promise, fulfilled with array of copy results:
[
{
"src": "/path/to/src",
"dest": "/path/to/dest",
"stats": <Stats>
},
{
"src": "/path/to/src/file.txt",
"dest": "/path/to/dest/file.txt",
"stats": <Stats>
},
{
"src": "/path/to/src/subfolder",
"dest": "/path/to/dest/subfolder",
"stats": <Stats>
},
{
"src": "/path/to/src/subfolder/nested.txt",
"dest": "/path/to/dest/subfolder/nested.txt",
"stats": <Stats>
}
]
The value returned by the copy function implements the EventEmitter interface, and emits the following events:
| Event | Handler signature |
|---|---|
copy.events.ERROR | function(error, ErrorInfo) |
copy.events.COMPLETE | function(Array<CopyOperation>) |
copy.events.CREATE_DIRECTORY_START | function(CopyOperation) |
copy.events.CREATE_DIRECTORY_ERROR | function(error, CopyOperation) |
copy.events.CREATE_DIRECTORY_COMPLETE | function(CopyOperation) |
copy.events.CREATE_SYMLINK_START | function(CopyOperation) |
copy.events.CREATE_SYMLINK_ERROR | function(error, CopyOperation) |
copy.events.CREATE_SYMLINK_COMPLETE | function(CopyOperation) |
copy.events.COPY_FILE_START | function(CopyOperation) |
copy.events.COPY_FILE_ERROR | function(error, CopyOperation) |
copy.events.COPY_FILE_COMPLETE | function(CopyOperation) |
...where the types referred to in the handler signature are as follows:
ErrorInfo| Property | Type | Description |
|---|---|---|
src | string | Source path of the file/folder/symlink that failed to copy |
dest | string | Destination path of the file/folder/symlink that failed to copy |
CopyOperation| Property | Type | Description |
|---|---|---|
src | string | Source path of the relevant file/folder/symlink |
dest | string | Destination path of the relevant file/folder/symlink |
stats | fs.Stats | Stats for the relevant file/folder/symlink |
FAQs
A fork of `recursive-copy`: Simple, flexible file copy utility
The npm package @11ty/recursive-copy receives a total of 54,394 weekly downloads. As such, @11ty/recursive-copy popularity was classified as popular.
We found that @11ty/recursive-copy demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 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.

Company News
Socket’s first CISO brings deep experience securing high-growth SaaS companies as open source supply chain threats accelerate.

Company News
Replit is integrating Socket Firewall into its AI-powered development experience to help protect builders from malicious open source packages.

Security News
npm confirmed a tooling bug incorrectly marked several one-character packages as security holders and said it was working on a rollback.