hudada-cli
Version:
专为程序员准备的本地文档搜索,快捷开发工具
3 lines (2 loc) • 1.66 kB
JavaScript
import o from"fs/promises";import t from"path";import r from"chalk";import{existsSync as i}from"fs";async function e(e){try{const a=t.isAbsolute(e)?e:t.resolve(process.cwd(),e);if(!i(a))return void console.error(r.red(`路径不存在: ${e}`));const s=await o.stat(a),c=s.isDirectory(),l=c?"目录":"文件";if(console.log(r.yellow(`即将删除${l}: ${e}`)),console.log(r.gray("类型:",l)),console.log(r.gray("大小:",function(o){if(0===o)return"0 B";const t=["B","KB","MB","GB","TB"],r=Math.floor(Math.log(o)/Math.log(1024));return`${(o/Math.pow(1024,r)).toFixed(1)} ${t[r]}`}(await n(a)))),console.log(r.gray("修改时间:",s.mtime.toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}))),c){const i=await async function(r){let i=0,e=0;async function n(r){const a=await o.readdir(r,{withFileTypes:!0});for(const o of a){const a=t.join(r,o.name);o.isDirectory()?(e++,await n(a)):i++}}return await n(r),{files:i,directories:e}}(a);console.log(r.gray(`包含: ${i.files} 个文件, ${i.directories} 个目录`))}try{c?await o.rm(a,{recursive:!0,force:!0}):await o.unlink(a),console.log(r.green(`✓ 成功删除${l}: ${e}`))}catch(o){throw"EACCES"===o.code?new Error(`没有权限删除: ${e}`):"EBUSY"===o.code?new Error(`${l}正在被使用: ${e}`):o}}catch(o){console.error(r.red("删除失败:"),o)}}async function n(r){const i=await o.stat(r);if(!i.isDirectory())return i.size;let e=0;const a=await o.readdir(r,{withFileTypes:!0});for(const i of a){const a=t.join(r,i.name);if(i.isDirectory())e+=await n(a);else{e+=(await o.stat(a)).size}}return e}export{e as removeFileOrDirectory};