天天看點

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的世界裡山高水長,還得繼續默默前行。

生活不隻有詩和遠方,還有面包和牛奶。

繼續閱讀