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

打印 上一主题 下一主题

主题 1900|帖子 1900|积分 5700


  1. const fs = require('fs')
  2. const path = require('path')
  3. /**
  4. * @description: 获取完整的文件路径
  5. * @param {*} url 路径
  6. * @return {*} 返回完整的文件路径
  7. */
  8. const getPath = (url) => {
  9.   return path.join(__dirname, url)
  10. }
  11. /**
  12. * @description: 获取参数
  13. * @return {*} target【目标文件夹】 source【源文件夹】
  14. */
  15. function parseArgv() {
  16.   let arguments = process.argv.splice(2)
  17.   const target = arguments[0] || './copy'
  18.   const source = arguments[1] || './'
  19.   return { target, source }
  20. }
  21. /**
  22. * @description: 是否是文件夹
  23. * @param {*} pathDir 路径
  24. * @return {*} true 是,false 否
  25. */
  26. const isDir = (pathDir) => {
  27.   const path = getPath(pathDir)
  28.   let data = false
  29.   try {
  30.     data = fs.statSync(path).isDirectory()
  31.     return data
  32.   } catch (error) {
  33.     return data
  34.   }
  35. }
  36. /**
  37. * @description: 获取文件夹列表
  38. * @param {*} pathDir 路径
  39. * @return {*} 文件列表
  40. */
  41. const getDirList = (pathDir) => {
  42.   const path = getPath(pathDir)
  43.   return new Promise((resolve, reject) => {
  44.     fs.readdir(path, (err, data) => {
  45.       if (err) {
  46.         rejects(err)
  47.       }
  48.       resolve(data)
  49.     })
  50.   })
  51. }
  52. const exclude = ['node_modules', '.gitignore']
  53. const main = async (target, source) => {
  54.   let list = await getDirList(source)
  55.   const except = [path.basename(target), path.parse(__filename).base]
  56.   list = list.filter((item) => {
  57.     return !except.includes(item)
  58.   })
  59.   isDir(target) ? '' : fs.mkdirSync(target, { recursive: true })
  60.   const copyFile = (list, target, source) => {
  61.     const result = list.filter((item) => {
  62.       return !exclude.includes(item)
  63.     })
  64.     result.forEach(async (item) => {
  65.       const path =
  66.         source.endsWith('./') || source.endsWith('/')
  67.           ? './' + item
  68.           : source + '/' + item // 原始路径
  69.       const copyPath = target + '/' + item //复制的路径
  70.       if (isDir(path)) {
  71.         if (!fs.existsSync(copyPath)) {
  72.           await fs.mkdirSync(copyPath)
  73.           console.log(
  74.             `正在复制:文件夹从${getPath(path)}------->复制到${getPath(
  75.               copyPath
  76.             )} ======成功`
  77.           )
  78.         }
  79.         let needCopyList = await getDirList(path)
  80.         await copyFile(needCopyList, copyPath, path)
  81.       } else {
  82.         if (!fs.existsSync(copyPath)) {
  83.           fs.copyFileSync(path, copyPath)
  84.           console.log(
  85.             `正在复制:文件从${getPath(path)}------->复制到${getPath(
  86.               copyPath
  87.             )} ======成功`
  88.           )
  89.         }
  90.       }
  91.     })
  92.   }
  93.   copyFile(list, target, source)
  94. }
  95. const { target, source } = parseArgv()
  96. main(target, source)
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

花瓣小跑

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表