Skip to content

Instantly share code, notes, and snippets.

@avisek
Created November 7, 2023 16:05
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 avisek/8931f256d55c8eee9a23c9ed1ee1f7fc to your computer and use it in GitHub Desktop.
Save avisek/8931f256d55c8eee9a23c9ed1ee1f7fc to your computer and use it in GitHub Desktop.
Recursively copy and move files & directories using Node.js
function copyRecursively(sourceDir: string, destinationDir: string): void {
const files = fs.readdirSync(sourceDir)
if (!fs.existsSync(destinationDir))
fs.mkdirSync(destinationDir, { recursive: true })
files.forEach(file => {
const sourceFile = path.join(sourceDir, file)
const destinationFile = path.join(destinationDir, file)
if (fs.statSync(sourceFile).isDirectory()) {
copyRecursively(sourceFile, destinationFile)
} else {
fs.copyFileSync(sourceFile, destinationFile)
}
})
}
function copyRecursively(src: string, dest: string) {
if (fs.statSync(src).isDirectory()) {
if (!fs.existsSync(dest)) {
fs.mkdirSync(dest, { recursive: true })
}
fs.readdirSync(src).forEach(file => {
copyRecursively(path.join(src, file), path.join(dest, file))
})
} else {
fs.copyFileSync(src, dest)
}
}
function moveRecursively(sourceDir: string, destinationDir: string): void {
const files = fs.readdirSync(sourceDir)
if (!fs.existsSync(destinationDir))
fs.mkdirSync(destinationDir, { recursive: true })
files.forEach(file => {
const sourceFile = path.join(sourceDir, file)
const destinationFile = path.join(destinationDir, file)
if (fs.statSync(sourceFile).isDirectory()) {
moveRecursively(sourceFile, destinationFile)
} else {
fs.renameSync(sourceFile, destinationFile)
}
})
fs.rmdirSync(sourceDir)
}
function moveRecursively(src: string, dest: string) {
if (fs.statSync(src).isDirectory()) {
if (!fs.existsSync(dest)) {
fs.mkdirSync(dest, { recursive: true })
}
fs.readdirSync(src).forEach(file => {
moveRecursively(path.join(src, file), path.join(dest, file))
})
fs.rmdirSync(src)
} else {
fs.renameSync(src, dest)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment