Copy files, directories and symlinks
const copy = require('copy-concurrently')
copy('/path/to/thing', '/new/path/thing').then(() => {
// this is now copied
}).catch(err => {
// oh noooo
})
Copies files, directories and symlinks. Ownership is maintained when
running as root, permissions are always maintained. On Windows, if symlinks
are unavailable then junctions will be used.
Recursively copies from
to to
and resolves its promise when finished.
If to
already exists then the promise will be rejected with an EEXIST
error.
Options are:
1
) The maximum number of concurrent copies to do at once.copy.item
) The function to call on each file after recursing into a directory.process.platform === 'win32'
) If true enables Windows symlink semantics. This requiresstat
to determine if the destination of a symlink is a file or directory. If symlinking a directoryOptions can also include dependency injection:
global.Promise
) The promise implementation to use, defaults to Node's.require('fs')
) The filesystem module to use. Can be usedgraceful-fs
or to inject a mock.require('fs-write-stream-atomic')
) ThewriteStreamAtomic
to use. Used to inject a mock.process.getuid
) A function that returns the current UID. Used to inject a mock.Ordinarily you'd only call copy
above. But it's possible to use it's
component functions directly. This is useful if, say, you're writing
move-concurently.
Copies an ordinary file from
to destination to
. Usesfs-write-stream-atomic
to ensure that the file is either entirely copied
or not at all.
Options are:
getuid()
is 0
then this and gid will be used toto
. If uid is present then gid must be too.to
will have its perms set to mode
.require('fs')
) The filesystem module to use. Can be usedgraceful-fs
or to inject a mock.global.Promise
) The promise implementation to use, defaults to Node's.require('fs-write-stream-atomic')
) ThewriteStreamAtomic
to use. Used to inject a mock.Copies a symlink from
to destination to
. If you're using Windows and
symlinking fails and what you're linking is a directory then junctions will
be tried instead.
Options are:
require('fs')
) The filesystem module to use. Can be usedgraceful-fs
or to inject a mock.global.Promise
) The promise implementation to use, defaults to Node's.process.platform === 'win32'
) If true enables Windows symlink semantics. This requiresstat
to determine if the destination of a symlink is a file or directory. If symlinking a directoryReads all of the files in directory from
and adds them to the queue
using recurseWith
(by default copy.item
).
Options are:
run-queue
object to add files found inside from
to.copy.item
) The function to call on each file after recursing into a directory.getuid()
is 0
then this and gid will be used toto
. If uid is present then gid must be too.to
will have its perms set to mode
.require('fs')
) The filesystem module to use. Can be usedgraceful-fs
or to inject a mock.process.getuid
) A function that returns the current UID. Used to inject a mock.Copies some kind of from
to destination to
. This looks at the filetype
and calls copy.file
, copy.symlink
or copy.recurse
as appropriate.
Symlink copies are queued with a priority such that they happen after all
file and directory copies as you can't create a junction on windows to a
file that doesn't exist yet.
Options are:
run-queue
object tocopy.recurse
if from
is a directory.copy.item
) The function to call on each file after recursing into a directory.getuid()
is 0
then this and gid will be used toto
. If uid is present then gid must be too.to
will have its perms set to mode
.require('fs')
) The filesystem module to use. Can be usedgraceful-fs
or to inject a mock.process.getuid
) A function that returns the current UID. Used to inject a mock.process.platform === 'win32'
) If true enables Windows symlink semantics. This requiresstat
to determine if the destination of a symlink is a file or directory. If symlinking a directoryglobal.Promise
) The promise implementation to use, defaults to Node's.require('fs-write-stream-atomic')
) ThewriteStreamAtomic
to use. Used to inject a mock.