Skip to content
/ rcpy Public

Lightweight, fast, simple and flexible file copy utility for Node.js

License

Notifications You must be signed in to change notification settings

SukkaW/rcpy

Repository files navigation

rcpy

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.

Installation

# npm
npm i rcpy
# yarn
yarn add rcpy
# pnpm
pnpm i rcpy

Usage

// 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 if src 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 if src 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 to false.
    • force: boolean optional. Whether to overwrite existing file/directory, default to true. Note that the copy operation will silently fail if you set this to false and the destination exists. Use the errorOnExist option to change this behavior.
    • overwrite: boolean optional. Deprecated, now is the alias of force. Serves as a compatibility option for fs-extra.
    • errorOnExist: boolean optional. Whether to throw an error if dest already exists, default to false.
    • filter: (src: string, dest: string) => boolean | Promise<boolean> optional. Filter copied files/directories, return true 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 to 0. See mode flag of fs.copyFile()
    • preserveTimestamps: boolean optional. Whether to preserve file timestamps, default to false, where the behavior is OS-dependent.
    • concurrency: number optional. The number of concurrent copy operations, default to 32.

Differences between rcpy and fs-extra

  • Doesn't use graceful-fs to prevent EMFILE error.
    • rcpy instead provides a concurrency 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 convert rcpy to Node.js callback style API.P

Differences between rcpy and Node.js fs.cp()

  • Doesn't support URL for src and dest.
    • PR is welcome to add file:// support.
  • 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 if dereference 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 prevent EMFILE error.

License

MIT


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

About

Lightweight, fast, simple and flexible file copy utility for Node.js

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published