UNPKG

hudada-cli

Version:

专为程序员准备的本地文档搜索,快捷开发工具

3 lines (2 loc) 2.31 kB
#!/usr/bin/env node import e from"fs";import t from"path";import r from"chalk";async function n(){try{const m=process.cwd(),l=await e.readdirSync(m,{withFileTypes:!0}),p=[];for(const r of l){if(r.name.startsWith("."))continue;const s=t.join(m,r.name),l=await e.statSync(s);let d=l.size;r.isDirectory()&&(d=await o(s)),p.push({name:r.name,size:a(d),type:i(r,l),modified:(c=l.mtime,c.toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})),permissions:(n=l.mode,(256&n?"r":"-")+(128&n?"w":"-")+(64&n?"x":"-")+(32&n?"r":"-")+(16&n?"w":"-")+(8&n?"x":"-")+(4&n?"r":"-")+(2&n?"w":"-")+(1&n?"x":"-")),rawSize:d})}p.sort(((e,t)=>"目录"===e.type&&"目录"!==t.type?-1:"目录"!==e.type&&"目录"===t.type?1:e.name.localeCompare(t.name))),console.log(r.cyan(`\n当前目录: ${m}\n`)),console.log(r.bold(s("权限",12)+s("大小",12)+s("类型",10)+s("修改时间",25)+"名称")),console.log("─".repeat(80));for(const e of p){const t="目录"===e.type?r.blue:e.name.endsWith(".exe")?r.green:r.white;console.log(s(e.permissions,12)+s(e.size,12)+s(e.type,10)+s(e.modified,25)+t(e.name))}const d=p.reduce(((e,t)=>e+t.rawSize),0),f=p.filter((e=>"目录"===e.type)).length,u=p.length-f;console.log("\n"+r.gray(`共 ${f} 个目录,${u} 个文件,总大小 ${a(d)}`))}catch(e){console.error(r.red("读取目录失败:"),e)}var n,c}async function o(n){let a=0;try{const r=await e.readdirSync(n,{withFileTypes:!0});for(const i of r){const r=t.join(n,i.name);if(i.isDirectory())a+=await o(r);else{a+=(await e.statSync(r)).size}}}catch(e){console.error(r.red(`计算目录大小失败: ${n}`))}return a}function a(e){if(0===e)return"0 B";const t=Math.floor(Math.log(e)/Math.log(1024));return`${(e/Math.pow(1024,t)).toFixed(1)} ${["B","KB","MB","GB","TB"][t]}`}function i(e,r){if(e.isDirectory())return"目录";if(e.isSymbolicLink())return"链接";switch(t.extname(e.name).toLowerCase()){case".exe":case".bat":case".cmd":return"可执行文件";case".txt":case".md":case".json":return"文本文件";case".jpg":case".jpeg":case".png":case".gif":return"图片";case".mp3":case".wav":return"音频";case".mp4":case".avi":return"视频";case".zip":case".rar":case".7z":return"压缩包";default:return"文件"}}function s(e,t){return String(e).padEnd(t)}export{n as listFiles};