2

Filetools工具

 2 years ago
source link: https://hkvision.cn/2019/09/12/filetools%E5%B7%A5%E5%85%B7/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Filetools工具

2019年9月12日
|85 阅读

本文为原创文章,转载注明出处,欢迎关注网站https://hkvision.cn

filetools工具

本人用golang写的一个小工具,用于对文件进行操作,项目地址在这:filetools

暂时无法直接提供编译好的二进制文件,等我啥时候有时间了研究下CI工具再说。

现在已经可以提供二进制下载了,去github release上找就行,想安装最新版的可以从源码安装

go get -u github.com/haokunt/filetools/...

源码安装需要你有go环境,目前没有测试最低版本,1.11+都是可以的。

最初写这个工具的设想是将很多命令整合到一起,像cp,mv,rm等,所以所有功能均使用子命令的方式进行提供,可以用-h来查看使用帮助。对于子命令也可以在后面加上-h查看子命令使用帮助。

项目已经可以实现国际化,设置正确环境变量即可看到中文帮助。

设置LANG环境变量即可

# Linux
export LANG=zh_CN
# Windows
set LANG=zh_CN

已实现的功能

comapre

compare用于比较两个目录的不同,使用golang的os.Stat函数获取文件信息,比较大小和文件名两方面,加上-c参数则会打开每个文件进行详细比较。比较信息将打印在控制台,包括new file, modified file(文件名一样但是大小不一样或者), deleted file。

使用场景是在进行目录复制的时候,如果中途断了,或者一些其他情况,导致我们无法判断目录是否复制成功,可以进行比较。

copy将一个文件或者目录拷贝到其他地方,这个命令最激动人心的地方是有进度条,加上-pb即可,有进度条的情况下会先统计源目录,因此速度会慢一些,我自己使用的时候是40w个文件统计需要花一段时间,不过不太长,可以接受。

使用场景是在对大文件,大目录进行拷贝的时候可以加上进度条,灰常舒爽

info命令会输出文件或目录的一些信息,这些信息包括文件名,文件类型(真实类型),文件大小(真实目录大小),权限等,v0.21版本之后这个命令重构了,用了协程之后速度飞起(绝对比Windows自带的快)

使用场景是探测真实文件类型,在Linux下统计真实目录大小

rename

rename命令会重命名文件,加上-k参数可以保持原有文件(类似copy,但不支持目录)

使用场景略

list命令会列出目录下的所有文件,这个命令可以排序,可以限制输出到控制台的数量

使用场景是对某目录下的大文件进行查找,快速定位哪些文件占用了较多的磁盘空间

delete

delete命令是用来删除目录或者文件的,默认情况下这个命令执行软删除,直接删除可以用-hd参数。软删除会删除到~/.ft-trash目录下

正如我在github上写的那样,本来我想通过调用windows api来实现在windows环境下软删除是移动到回收站的功能,但是找了一圈发现网上推荐的方法是调用SHFileOperationA这个函数(DeleteFile函数我试过,直接删除了),但是这个函数的参数是一个C结构体,这意味着,要么我装个VS,用cgo来实现,要么我弄个Go结构,模仿这个结构,然后用cgo的那一套,unsafe.Pointer拿到指针,直接调用dll。前一种方案很传统,实现起来问题不大,但是那就正式使用cgo,这是我不能容忍的,本来这个项目我就打算用纯go写,后一种方案我没尝试过,理论上来说是可以的,但是最大的问题是go结构能否保证和c结构一样,即使我每一个字段都按照c结构来,还有内存对齐的问题,还有32位和64位的问题,总之这个解决方案即使成功了,可能也就只能我自己用用,想有普适性很困难。另外考虑到所有系统实现一致性的问题,我还是决定不扔回收站了。

PS: 可能有人会问了,说我直接找到回收站在什么地方然后移过去不就行了。我考虑过这个问题,应该说我最先想到的就是这个方案,但是我发现Windows的回收站比想象中复杂,最大的问题是文件命名,大家应该知道回收站里面的文件是可以重名的,然后我跑去回收站一看,呵呵,里面真实的文件名是一串生成的乱码,也会带名字但是前缀是乱码,咱也不知道这个乱码咋生成的,网上也没找到资料,如果有谁知道这串码怎么生成的,请告诉我,我会用go实现的。

未来会开发几个针对~/.ft-trash目录的功能,例如查找文件,清理回收站等

move用来移动文件或目录,和mv差不多,但是就是有些报错和mv不一样,也可能是我测试的平台不一样,总之我尽可能的考虑了一些极端情况,大家使用过程中遇到了什么bug请告诉我。

server

v0.2.2版本新增子命令,可以打开一个简单的基于HTTP的文件查看和上传服务,用于在局域网范围内的文件传输,主要目标是在进行类似部署操作时,不再需要安装WinSCP等工具,直接使用浏览器即可,方便客户端和服务器进行文件传输,可以使用BasicAuth,保证基本的安全,不建议长时间开启服务,需要时使用即可。

未来的打算

未来将提供更多的文件相关的功能,要是有什么好的建议可以提issues。

目前打算再加一个支持正则的功能,这样前面的命令可以实现更丰富的功能


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK