recursive copy
Copy a file or directory. The directory can have contents.
rcpy
serves as a drop-in replacement of ncp
and fs-extra
's copy
function (rcpy
passes most of fs-extra
's test cases). It can also be used as a polyfill for Node.js fs.cp
API.
# npm
npm i rcpy
# yarn
yarn add rcpy
# pnpm
pnpm i rcpy
// CommonJS
const { rcpy } = require('rcpy');
// or
const { copy } = require('rcpy'); // "copy" is an alias of "rcpy"
// ES Module
import { rcpy } from 'rcpy';
// or
import { copy } from 'rcpy'; // "copy" is an alias of "rcpy"
(async () => {
await copy(src, dest, options);
})();
src
:string
The path of the file/directory to copy. Note that ifsrc
is a directory it will copy everything inside of this directory, not the entire directory itself.dest
:string
The destination of the copied file/directory. Note that currently ifsrc
is a file,dest
cannot be a directory. This behavior might be changed in the future.option
:RcpyOption
optional.dereference
:boolean
optional. Whether to dereference symbolic links, default tofalse
.force
:boolean
optional. Whether to overwrite existing file/directory, default totrue
. Note that the copy operation will silently fail if you set this to false and the destination exists. Use theerrorOnExist
option to change this behavior.overwrite
:boolean
optional. Deprecated, now is the alias offorce
. Serves as a compatibility option forfs-extra
.errorOnExist
:boolean
optional. Whether to throw an error ifdest
already exists, default tofalse
.filter
:(src: string, dest: string) => boolean | Promise<boolean>
optional. Filter copied files/directories, returntrue
to copy,false
to skip. When a directory is skipped, all of its contents will be skipped as well.mode
:number
optional. Modifiers for copy operation, default to0
. Seemode
flag offs.copyFile()
preserveTimestamps
:boolean
optional. Whether to preserve file timestamps, default tofalse
, where the behavior is OS-dependent.concurrency
:number
optional. The number of concurrent copy operations, default to32
.
- Doesn't use
graceful-fs
to preventEMFILE
error.rcpy
instead provides aconcurrency
option to limit the number of concurrent copy operations.
- Asynchronous and Promise-based API only. No synchronous API, no Node.js callback style API.
- Use
require('util').callbackify
to convertrcpy
to Node.js callback style API.P
- Use
- Doesn't support
URL
forsrc
anddest
.- PR is welcome to add
file://
support.
- PR is welcome to add
- Doesn't support
recursive
option.rcpy
will always copy directories' content recursively.- PR is welcome to add this option.
- Doesn't support
verbatimSymlinks
option.rcpy
will always perform path resolution for symlinks ifdereference
option is enabled.- PR is welcome to add this option.
- Extra
concurrency
option.rcpy
will use this option to limit the number of concurrent copy operations to preventEMFILE
error.
rcpy © Sukka, Released under the MIT License.
Authored and maintained by Sukka with help from contributors (list).
Personal Website · Blog · GitHub @SukkaW · Telegram Channel @SukkaChannel · Mastodon @[email protected] · Twitter @isukkaw · Keybase @sukka