在Node中将文件从一个目录同步到另一个目录?

时间:2018-05-02 03:16:35

标签: javascript node.js

我使用带有通配模式的cpy来查找并复制src/main/css中的所有文件,并将它们放在./dist中。

但是现在我还有src/main/css下面的子目录(例如src/main/css/margins/index.css),而cpy在复制文件时不包含这些子目录。

Node(fs或path?)中是否有处理此案例的API,或者有人知道一个方便的包?

2 个答案:

答案 0 :(得分:1)

试试这个。

const fs = require('fs');
const path = require('path');

var mkdir = function (dir) {
    // making directory without exception if exists
    try {
        fs.mkdirSync(dir, 0755);
    } catch (e) {
        if (e.code != "EEXIST") {
            throw e;
        }
    }
};

var copy = function (src, dest) {
    var readS = fs.createReadStream(src);
    var writeS = fs.createWriteStream(dest);
    readS.pipe(writeS);

    readS.on("end", function () {
        // Operation done
    });
};

var copyDir = function (src, dest) {
    mkdir(dest);
    var files = fs.readdirSync(src);
    for (var i = 0; i < files.length; i++) {
        var current = fs.lstatSync(path.join(src, files[i]));
        if (current.isDirectory()) {
            copyDir(path.join(src, files[i]), path.join(dest, files[i]));
        } else if (current.isSymbolicLink()) {
            var symlink = fs.readlinkSync(path.join(src, files[i]));
            fs.symlinkSync(symlink, path.join(dest, files[i]));
        } else {
            copy(path.join(src, files[i]), path.join(dest, files[i]));
        }
    }
};

copyDir('./src', './dest');

这段代码的灵感来自https://gist.github.com/tkihira/3014700。我已经对原始代码进行了一些修改以使其工作,因为util.pump现在已经过时了。

答案 1 :(得分:-1)

我最终使用copy-dir

require('copy-dir').sync(PLI.src.main.css, PLI.DIST);

如果有人有办法对Node做同样的事情并避免依赖,请告诉你。