copy

copy(src, dest[, options][, callback])

复制文件或目录。目录可以包含内容。

  • src <String> 注意,如果 src 是一个目录,它将复制该目录中的所有内容,而不是整个目录本身。
  • dest <String> 注意,如果 src 是一个文件, dest 不能是目录
  • options <Object>
    • overwrite <boolean>: 覆盖现有文件或目录,默认值为true。请注意,如果将此设置为false并且目标存在,则复制操作将自动失败。使用errorOnExist选项更改此行为。
    • errorOnExist <boolean>: 当overwrite为false并且目标存在时,抛出错误。默认值为false。
    • dereference <boolean>: 取消引用符号链接,默认值为false。
    • preserveTimestamps <boolean>: 如果为true,将设置对原始源文件的最后修改和访问时间。如果为false,则时间戳行为取决于操作系统。默认值为false。
    • filter <Function>: 用于过滤复制的文件/目录的函数。返回true复制项,返回false忽略项。还可以返回解析为true或false的Promise(或在异步函数中传递)。
  • callback <Function>
    • err <Error>

Example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const fs = require('fs-extra')

// 使用回调:
fs.copy('/tmp/myfile', '/tmp/mynewfile', err => {
if (err) return console.error(err)
console.log('success!')
}) // 复制文件

fs.copy('/tmp/mydir', '/tmp/mynewdir', err => {
if (err) return console.error(err)
console.log('success!')
}) // 复制目录,即使它有子目录或文件

// 使用 Promise:
fs.copy('/tmp/myfile', '/tmp/mynewfile')
.then(() => {
console.log('success!')
})
.catch(err => {
console.error(err)
})

// 使用 async/await:
async function example () {
try {
await fs.copy('/tmp/myfile', '/tmp/mynewfile')
console.log('success!')
} catch (err) {
console.error(err)
}
}

example()

Using filter function

1
2
3
4
5
6
7
8
9
10
11
const fs = require('fs-extra')

const filterFunc = (src, dest) => {
// 你的逻辑在这里
// 如果返回true,将复制它
}

fs.copy('/tmp/mydir', '/tmp/mynewdir', { filter: filterFunc }, err => {
if (err) return console.error(err)
console.log('success!')
})