Skip to content

Instantly share code, notes, and snippets.

@rapkin
Created December 7, 2017 14:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rapkin/49f6ce6f8f27e1717b3f9dca9fe3d4a4 to your computer and use it in GitHub Desktop.
Save rapkin/49f6ce6f8f27e1717b3f9dca9fe3d4a4 to your computer and use it in GitHub Desktop.
Script to copy files recursively
const fs = require('fs')
const path = require('path')
const mkdir = require('mkdirp')
const src = path.join(__dirname, 'source')
const dest = path.join(__dirname, 'destination')
function copyFile(src, dest) {
return new Promise(function (resolve, reject) {
let hasFinished = false
function handleCopyFailed(error) {
if (hasFinished) return
hasFinished = true
if (typeof read.close === 'function')
read.close()
if (typeof write.close === 'function')
write.close()
return reject(error)
}
var read = fs.createReadStream(src)
var write = fs.createWriteStream(dest, {flags: 'w'})
read.on('error', handleCopyFailed)
write.on('error', handleCopyFailed)
write.on('finish', () => {
hasFinished = true
resolve()
})
read.pipe(write)
})
}
async function copy(src, dest) {
console.log(src, '->', dest)
const stats = fs.statSync(src)
if (stats.isDirectory()) {
await mkdir(dest)
const files = fs.readdirSync(src)
for (let name of files) {
await copy(path.join(src, name), path.join(dest, name))
}
}
else await copyFile(src, dest)
}
copy(src, dest)
.then((results) => console.info('Copied'))
.catch((error) => console.error('Copy failed:', error))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment