Go 介绍我用 Go 开发的小工具:rename

daqing · 2023年09月15日 · 最后由 lululau 回复于 2023年10月11日 · 1188 次阅读

主打功能

重命名文件。(其实,也就这一个功能)

安装方式

$ go install github.com/daqing/rename@latest

用法

a. 把 good.txt 重名为 bad.txt:

$ rename good.txt bad

b. 把 good.markdown 重命名为 good.md

$ rename good.markdown .md

c. 把 /var/log/ 目录下的 日志文件,批量修改为 .backup 后缀:

$ find /var/log -name '*.log' | xargs -I{} rename {} .backup

开源地址

https://github.com/daqing/rename

求 Star :-)

大家怎么都去搞 Go 啦 😂

flask 回复

🐶因为受不了 err != nil 我搞 rust 去了

nyrf 回复

Rust 感觉好复杂啊 😂

4 楼 已删除
flask 回复

写起来的确复杂很多,我因为写 ruby 多,然后学的很慢,估计自己学了至少五回,今年才拿来正式写东西了。主要前阵子因为一个项目用 go 打包成 exe 后,给客户安装,然后他们装了 360,360 一直报毒,最后用 rust 改写了才好了。

感觉有点多余啊,既然这个工具都需要用 findxargs 命令,那为啥不用 mv 命令来做这个批量改名动作?

find /path/to/directory -type f -name "*.md" -exec mv {} {}.backup \;
nyrf 回复

@nyrf 可能是你用了 upx 压缩了 exe , 很多木马都是用的那个压缩。当然没压缩也有可能报毒,如果你执行了一些危险的操作,删除文件什么的,也有可能报毒。

批量重命名可以用 zsh 的 zmv 函数,这个是目前用到过的最顺手的;半批量的重命名,Emacs 的 wdired.el 是最棒的

huacnlee 回复

find /path/to/directory -type f -name "*.md" -exec mv {} {}.backup \;

这个命令,会把 foo.md 重命名为 foo.md.backup,而不是 foo.backup

这样:

find . -type f -name "*.md" -exec bash -c 'mv "$0" "${0%.md}.backup"' {} \;

这个是 Wrap 的 AI 给的建议:

huacnlee 回复

能实现,但是不如我的工具简单啊。

而且那个 exec 后面还要用 bash 去执行

rename

$ find /var/log -name '*.log' | xargs -I{} rename {} .backup

脚本

$ find /var/docs -type f -name "*.md" -exec bash -c 'mv "$0" "${0%.md}.backup"' {} \;
snowlyg 回复

并没有,我后来发现,只要隐藏了 cmd 窗口,这个 360 就很容易报毒,后来在 v2 上看有人说,现在 go 写的编译成 exe 特别容易被 360 这些报毒。

 推荐神器 vimv

zmv/path/to/directory 目录(递归地)下的 *.md 文件重名为 *.backup:

zmv '(**)/(*).md' '$1$2.backup'

dry-run 方式:

zmv -n '(**)/(*).md' '$1$2.backup'

复制而不是重命名:

zmv -p cp '(**)/(*).md' '$1$2.backup'
需要 登录 后方可回复, 如果你还没有账号请 注册新账号