UNPKG

hudada-cli

Version:

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

3 lines (2 loc) 1.99 kB
#!/usr/bin/env node import o from"fs/promises";import{existsSync as r}from"fs";import e from"path";import t from"chalk";async function i(i,n){try{if(!i||!n)return console.error(t.red("请提供源路径和目标路径")),void console.log(t.gray("用法: my mv <源路径> <目标路径>"));const c=e.isAbsolute(i)?i:e.resolve(process.cwd(),i),a=e.isAbsolute(n)?n:e.resolve(process.cwd(),n);if(!r(c))return void console.error(t.red(`源路径不存在: ${i}`));const l=(await o.stat(c)).isDirectory(),g=l?"目录":"文件",d=e.dirname(a),m=e.dirname(c)===e.dirname(a)?"重命名":"移动";console.log(t.cyan(`准备${m}${g}:`)),console.log(t.gray(`从: ${c}`)),console.log(t.gray(`到: ${a}`));try{if(r(d)||(await o.mkdir(d,{recursive:!0}),console.log(t.gray(`创建目标目录: ${d}`))),r(a))return void console.error(t.red(`目标路径已存在: ${n}`));await o.rename(c,a);const i=await o.stat(a);if(console.log(t.green(`✓ ${m}成功`)),console.log(t.gray("详细信息:")),console.log(t.gray(`类型: ${g}`)),console.log(t.gray(`大小: ${function(o){if(0===o)return"0 B";const r=["B","KB","MB","GB","TB"],e=Math.floor(Math.log(o)/Math.log(1024));return`${(o/Math.pow(1024,e)).toFixed(1)} ${r[e]}`}(i.size)}`)),console.log(t.gray(`修改时间: ${s=i.mtime,s.toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}`)),l){const r=await async function(r){let t=0,i=0;async function n(r){const s=await o.readdir(r,{withFileTypes:!0});for(const o of s){const s=e.join(r,o.name);o.isDirectory()?(i++,await n(s)):t++}}return await n(r),{files:t,directories:i}}(a);console.log(t.gray(`包含: ${r.files} 个文件, ${r.directories} 个目录`))}}catch(o){throw"EACCES"===o.code?new Error(`没有权限${m}: ${i}`):"ENOSPC"===o.code?new Error("磁盘空间不足"):"EXDEV"===o.code?new Error("不能跨设备移动文件/目录"):o}}catch(o){console.error(t.red("操作失败:"),o)}var s}export{i as moveFileOrDirectory};