Skip to content

复制文件

使用 fs.copyFileSync 方法,参数分别是新旧 path,需要保证目录存在,不会自动创建文件夹

复制文件夹

读取文件夹下所有文件,如果是文件类型直接复制,如果是文件夹则继续递归

javascript
const { join } = require('path')
const fs = require('fs')
function copyDirFile(filePath, newPath) {
    fs.readdir(filePath, (err, files) => {
        if (err) return console.warn(err)
        files.forEach(filename => {
            //获取当前文件的绝对路径
            const fileDir = join(filePath, filename);
            //根据文件路径获取文件信息,返回一个fs.Stats对象
            fs.stat(fileDir, (err, stats) => {
                if (err) return  console.warn('获取文件stats失败')
                const isFile = stats.isFile()
                const isDir = stats.isDirectory()
                if (isDir) {
                    // 首先创建对应文件夹
                    fs.mkdirSync(path.resolve(newPath, filename))

                    //递归,并将文件夹名拼接到 newPath 后作为下一层的 newPath
                    copyDirFile(fileDir, path.resolve(newPath, filename))
                } else if (isFile) {
                    try {
                        fs.copyFileSync(fileDir, path.resolve(newPath, filename)) // copy 文件
                        fs.rmSync(fileDir)
                    } catch (err) {
                        console.log(err)
                    }
                }
            })
        })
    })
}

使用操作系统的命令

通过 child_processexec 方法执行复制命令

新语法 fs.cp

使用 fs.cpSync ,参数分别为原始和目标(目录/文件)(异步方法去掉 Sync )

既可以复制文件,又可以复制目录

目录不存在时可自动创建(无论几级目录)

注意

  • 复制目录时,options 参数必须配置 recursive: true

  • 保证 node 版本在 16.7.0 及以上

0