惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

www.infosecurity-magazine.com
www.infosecurity-magazine.com
月光博客
月光博客
IT之家
IT之家
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
博客园 - 【当耐特】
Recorded Future
Recorded Future
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 聂微东
Last Week in AI
Last Week in AI
S
Schneier on Security
Google DeepMind News
Google DeepMind News
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
AWS News Blog
AWS News Blog
D
Docker
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
Spread Privacy
Spread Privacy
The GitHub Blog
The GitHub Blog
MongoDB | Blog
MongoDB | Blog
P
Palo Alto Networks Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
T
Tenable Blog
A
Arctic Wolf
C
Cisco Blogs
S
SegmentFault 最新的问题
T
The Exploit Database - CXSecurity.com
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Martin Fowler
Martin Fowler
G
GRAHAM CLULEY
The Register - Security
The Register - Security
Project Zero
Project Zero
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Latest news
Latest news
J
Java Code Geeks
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
L
LangChain Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
腾讯CDC
I
Intezer
Schneier on Security
Schneier on Security
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org

HaoKunT的博客

如何用 ollama 快速下载 deepseek 模型 - HaoKunT的博客 python使用gdal - HaoKunT的博客 Word中写LaTeX公式 - HaoKunT的博客 g++中的rpath和runpath - HaoKunT的博客 Ext4文件系统 - HaoKunT的博客 文件系统介绍 - HaoKunT的博客 理解shell - HaoKunT的博客 Hyper V安装ENVI - HaoKunT的博客 华为软件实习生笔试 - HaoKunT的博客 用C++实现一个命令行进度条 - HaoKunT的博客 PCA与GWPCA - HaoKunT的博客 字节后台实习生笔试题目 - HaoKunT的博客 Web终端仿真器 - HaoKunT的博客 阿里云API网关与函数计算的基础理解 - HaoKunT的博客 函数计算搭建DNS服务器 - HaoKunT的博客 DNS解析过程 - HaoKunT的博客 Github图片加载不出来 - HaoKunT的博客 将Elementary OS装在U盘中 - HaoKunT的博客 MacOS+Windows 双系统的安装 - HaoKunT的博客 IPXE+netboot+ISCSI 网络启动 - HaoKunT的博客 Esxi+NAS+Openwrt - HaoKunT的博客 Esxi的安装和使用 - HaoKunT的博客 利用acme自动更新证书 - HaoKunT的博客 Golang使用海康威视SDK - HaoKunT的博客 学习正则表达式 - HaoKunT的博客 Vugu View - HaoKunT的博客 Django Restframework 嵌套序列化 - HaoKunT的博客 看不了netlify的部署日志 - HaoKunT的博客 Go Modules的使用 - HaoKunT的博客 使用hugo+netlify部署个人主页 - HaoKunT的博客 关于我 - HaoKunT的博客 在线工具大全 - HaoKunT的博客 SWIG编译海康威视SDK 使用golang - HaoKunT的博客 SWIG 以Python为例 - HaoKunT的博客 Seafile - HaoKunT的博客 Golang的小技巧 - HaoKunT的博客 归档 - HaoKunT的博客 搜索 - HaoKunT的博客
Filetools工具 - HaoKunT的博客
HaoKunT · 2019-09-12 · via HaoKunT的博客

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

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

安装

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

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

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

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

使用

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

中文帮助

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

设置LANG环境变量即可

1
2
3
4
# Linux
export LANG=zh_CN
# Windows
set LANG=zh_CN

已实现的功能

comapre

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

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

copy

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

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

info

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

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

rename

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

使用场景略

list

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

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

server

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

未来的打算

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

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