A flexible and powerful Node.js utility for recursively copying files and directories with advanced configuration options.
- Recursive file and directory copying
- Configurable copy depth and height limits
- Directory flattening option
- Multiple conflict resolution strategies
- Support for single source or multiple sources
- Asynchronous operation with Promises
- Comprehensive error handling
- Configurable logging levels with Gulp-style output
npm install copy-recursiveimport copy from 'copy-recursive';
// Single file/directory copy with logging
const config = [{
src: 'source/path',
dest: 'destination/path',
depth: 2,
height: 0,
flatten: false,
conflictResolution: 'rename',
logLevel: 'brief'
}];
await copy(config);
// Multiple sources with verbose logging
const multiConfig = [{
src: ['source1', 'source2', 'source3'],
dest: 'destination/path',
flatten: true,
logLevel: 'verbose'
}];
await copy(multiConfig);Each configuration object supports the following options:
| Option | Type | Default | Description |
|---|---|---|---|
src |
string|string[] |
required | Source path(s) to copy from |
dest |
string |
required | Destination path to copy to |
depth |
number |
0 |
Maximum copy depth (0 for unlimited) |
height |
number |
0 |
Maximum copy height from root (0 for unlimited) |
flatten |
boolean |
false |
When true, flattens directory structure |
conflictResolution |
string |
'overwrite' |
How to handle conflicts ('overwrite', 'skip', or 'rename') |
logLevel |
string |
'none' |
Logging level ('none', 'verbose', or 'brief') |
overwrite: Overwrites existing files at destinationskip: Skips copying if file exists at destinationrename: Adds a numeric suffix to create a unique filename
none: No logging outputverbose: Detailed logging of all operationsbrief: Concise, Gulp-style logging with symbols→File copied↺File overwritten⠿File skipped⥅File renamed
Example brief logging output:
Starting copy task...
→ src/file1.txt → dest/file1.txt
↺ src/file2.txt → dest/file2.txt
⠿ src/file3.txt
⥅ src/file4.txt → dest/file4_1.txt
Copy task completed
copy-recursive/
├── index.js # Main module file
├── test-script.js # Test script by shell
├── test/ # Test by Mocha/Chai
├── docs/ # Generated documentation
├── jsdoc.json # JSDoc configuration
├── .mocharc.json # Mocha configuration
├── package.json # Project configuration
└── README.md # This file
To generate documentation:
npm run docsDocumentation will be generated in the docs directory. Open docs/index.html in your browser to view.
To run tests:
npm test- Clone the repository
- Install dependencies:
npm install- Make your changes
- Run tests:
npm test- Generate documentation:
npm run docsMIT
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Please open an issue for support.