天天看点

node实现将一个文件夹下的所有文件合并到一个文件夹下

合并多个文件层级下文件

合并文件我们用到最多的手动复制粘贴,但如果一个文件夹下层级繁杂手动一一的复制粘贴就非常的耗费时间而且容易出错,写一个脚本来帮助我们提高效率是非常棒的。

实现方法也是非常的简单 首先我们需要新建一个文件夹,然后递归查找每一个文件,然后将每一个文件拷贝到目标文件夹下,就完成了合并多个文件夹层级下的文件。

代码框架先判断存不存在merge文件夹,存在即删除文件夹内的所有文件和该文件夹,然后创建merge文件夹,递归遍历文件夹,然后拷贝到目标文件夹下。

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

const sourceFile = './source';
const mergeFile = './merge';

//判断存不存在merge文件夹
fs.exists(mergeFile,(exists)=>{
	console.log(exists)
	if(exists){
		//存在即删除文件夹内的所有文件和该文件夹
		deleteAll(mergeFile);
	}
	//创建merge文件夹
	fs.mkdir(mergeFile,err=>{
		if(err){
			throw err;
		}
	})
	console.log('make success')
	//深度遍历文件夹
	deepDirFn(sourceFile);
})
           

删除merge文件夹的文件和文件夹

function deleteAll(deletePath){
	let files = [];
	if(fs.existsSync(deletePath)){
		files = fs.readdirSync(deletePath);
		files.forEach(file=>{
			let curPath = path.join(deletePath,file)
			if(fs.statSync(curPath).isDirectory()){
				deleteAll(curPath);
			}else{
				fs.unlinkSync(curPath);
			}
		});
		fs.rmdirSync(deletePath)
	}
}


           

递归查询文件夹下的文件

function deepDirFn(sourceFile){
	let files = fs.readdirSync(path.resolve(__dirname,sourceFile));
	files.forEach(file=>{
		let curFilePath = path.join(sourceFile,file);
		let fileState = fs.statSync(curFilePath);
		
		//文件
		if(fileState.isFile()){
			//将文件copy到目标目录
			copyFile(path.join(mergeFile,file),curFilePath);
			
		}else if(fileState.isDirectory()){
			deepDirFn(sourceFile + '\/' + file);
		}
	})
}
           

复制文件到指定目录

function copyFile(mergePath,sourcePath){
	let rs = fs.createReadStream(sourcePath);
	
	rs.on('error',err=>{
		console.log('read error',sourcePath);
	})
	
	let ws = fs.createWriteStream(mergePath);
	
	ws.on('error',err=>{
		console.log('write error',mergePath);
	})
	
	rs.pipe(ws);
}
           

合并多个文件层级下文件,就说到这里,希望能给你带来帮助,有什么错误欢迎大佬对小白指点一二,如有转载请附上原文地址。3D的世界里山高水长,还得继续默默前行。

生活不只有诗和远方,还有面包和牛奶。

继续阅读