花瓣小跑 发表于 2024-9-11 03:12:36

node快速复制文件或文件夹,清除部门文件(node_modules)

https://i-blog.csdnimg.cn/direct/332d43e49ced44be821f2a016e02bf21.png

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

/**
* @description: 获取完整的文件路径
* @param {*} url 路径
* @return {*} 返回完整的文件路径
*/
const getPath = (url) => {
return path.join(__dirname, url)
}

/**
* @description: 获取参数
* @return {*} target【目标文件夹】 source【源文件夹】
*/
function parseArgv() {
let arguments = process.argv.splice(2)
const target = arguments || './copy'
const source = arguments || './'
return { target, source }
}

/**
* @description: 是否是文件夹
* @param {*} pathDir 路径
* @return {*} true 是,false 否
*/
const isDir = (pathDir) => {
const path = getPath(pathDir)
let data = false
try {
    data = fs.statSync(path).isDirectory()
    return data
} catch (error) {
    return data
}
}

/**
* @description: 获取文件夹列表
* @param {*} pathDir 路径
* @return {*} 文件列表
*/
const getDirList = (pathDir) => {
const path = getPath(pathDir)
return new Promise((resolve, reject) => {
    fs.readdir(path, (err, data) => {
      if (err) {
      rejects(err)
      }
      resolve(data)
    })
})
}

const exclude = ['node_modules', '.gitignore']

const main = async (target, source) => {
let list = await getDirList(source)
const except =
list = list.filter((item) => {
    return !except.includes(item)
})

isDir(target) ? '' : fs.mkdirSync(target, { recursive: true })
const copyFile = (list, target, source) => {
    const result = list.filter((item) => {
      return !exclude.includes(item)
    })
    result.forEach(async (item) => {
      const path =
      source.endsWith('./') || source.endsWith('/')
          ? './' + item
          : source + '/' + item // 原始路径

      const copyPath = target + '/' + item //复制的路径

      if (isDir(path)) {
      if (!fs.existsSync(copyPath)) {
          await fs.mkdirSync(copyPath)
          console.log(
            `正在复制:文件夹从${getPath(path)}------->复制到${getPath(
            copyPath
            )} ======成功`
          )
      }
      let needCopyList = await getDirList(path)

      await copyFile(needCopyList, copyPath, path)
      } else {
      if (!fs.existsSync(copyPath)) {
          fs.copyFileSync(path, copyPath)
          console.log(
            `正在复制:文件从${getPath(path)}------->复制到${getPath(
            copyPath
            )} ======成功`
          )
      }
      }
    })
}

copyFile(list, target, source)
}
const { target, source } = parseArgv()
main(target, source)




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: node快速复制文件或文件夹,清除部门文件(node_modules)