Skip to content

Instantly share code, notes, and snippets.

@CrypticSwarm
Forked from c4milo/copytree.js
Created September 2, 2010 22:23
Show Gist options
  • Save CrypticSwarm/563078 to your computer and use it in GitHub Desktop.
Save CrypticSwarm/563078 to your computer and use it in GitHub Desktop.
var fs = require('fs');
var path = require('path');
var sys = require('sys')
, limit = 50
, count = 0;
function copytree(src, dst) {
if(!path.existsSync(src)) {
throw new Error(src + ' does not exists. Nothing to be copied');
}
if(!fs.statSync(src).isDirectory()) {
throw new Error(src + ' must be a directory');
}
var filenames = fs.readdirSync(src);
var basedir = src;
if(!path.existsSync(dst)) {
fs.mkdirSync(dst, 0755);
}
var readNext = function(){
if (!filenames.length) return;
var filename = filenames.shift();
console.log(filename);
var file = basedir + '/' + filename;
var newdst = dst + '/' + filename;
if(fs.statSync(file).isDirectory()) {
copytree(file, newdst);
readNext();
} else {
count++;
var reader = fs.createReadStream(file);
var writer = fs.createWriteStream(newdst);
writer.addListener('close', function(){
count--;
readNext();
});
sys.pump(reader, writer);
}
}
readNext();
while(count < limit) readNext();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment