nodeJs写一个移动文件的脚本

1,736 阅读2分钟

昨天在写一个谷歌插件的时候,新的tab页采用的是vue+vuetify去开发的,所以需要频繁的打包,然后移动到谷歌插件包里,然后到浏览器中查看。但是移动文件着实浪费时间还容易出错,于是自己摸索着写了一个移动文件的脚本

首先分析一下逻辑
  1. 获取源文件夹
  2. 获取目标文件夹
  3. 删除目标文件夹中的内容
  4. 将源文件夹中的文件移动到目标文件夹中去

获取fs模块 fs是node的内置模块,操作文件

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

// 获取文件根目录路径
const BASE_PATH_URL = path.resolve(__dirname, '..')

/**
 * 获取源文件
 */ 
const sourceFilePath = BASE_PATH_URL + '你的文件夹'
/**
 * 获取目标文件
 */ 
const targetFilePath = BASE_PATH_URL + '目标文件夹'

开始删除目标文件夹中的文件

function removeDirFile(path, cb){
    let files = []
    // fs.existsSync 检测文件夹是否存在
    if(fs.existsSync(path)){
        // fs.readdirSync 读取目录
        files = fs.readdirSync(path)
        
        files.forEach((file,index) => {
            let filePath = path + '/' + file
            
            if(fs.statSync(filePath).isDirectory()){  //判断是否是文件夹
                removeDirFile(filePath, cb) // 递归处理
            }else{
                cb && cb()
            }
        })
    }else{
        cb && cb()
    }
}

移动源文件夹中的内容到目标文件夹

  1. 复制文件夹中的所有内容
  2. 执行复制操作
function copyDir(sourceDir, targetDir){
    // 判断目标文件夹是否存在,不存在直接创建一个
    if(fs.existsSync(targetDir)){
        // 读取源文件夹中的文件
        fs.readdir(sourceDir, (err, files) => {
            if(err) {
                return 
            }
            
            files.forEach((file,index) => {
                // 获取到各个文件的路径
                let sourcePath = path.join(sourceDir, file)
                let targetPath = path.join(targetDir, file)
                
                fs.stat(sourcePath, (err, stats) => {
                    if(err) return
                    if(stats.isDirectory()){ // 判断是不是文件夹
                        fs.mkdir(targetPath, (terr) => {
                            if(terr) return
                            copyDir(sourcePath, targetPath)  // 递归处理
                        })
                    }else{
                        copyFile(sourcePath, targetPath) // 执行复制文件
                    }
                })
            })
        })
    }else{  
        fs.mkdir(targetDir, (err) => {
            if(err) return 
            copyFile(sourceDir, targetDir)
        })
    }
}

// 复制文件操作
function copyFile(sourcePath, targetPath){
    let rs = fs.createReadStream(sourcePath)
    let ws = fs.createWriteStream(targetPath)
    
    rs.pipe(ws)
}
最后执行 removeDirFile() 这个方法就好了~
removeDirFile(targetFilePath, ()=>{
    copyDir(sourceFilePath, targetFilePath)
})

PS 如果有兴趣的话大家可以使用一下我们的插件谷歌的书签管理器GraBox哦, www.grabox.net/,

测试链接:测试链接