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的世界里山高水长,还得继续默默前行。

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值