站点图标 姿势小王子

安卓和linux批量重命名文件的几种方法

很早之前在论坛发过一个Windows批量重命名小工具,其实这类小工具还算挺多的:https://bbs.zsxwz.com/thread-264.htm

linux重命名文件可以用mv或者rename,安卓termux(不包括rename)也可以用。几个自己会用到的批量改名方法:

1、rename批量修改文件,支持正则表达式。当文件数量很多的时候,用rename还是比较合适的,效率会比mv高很多。

remane "s/旧名称/新名称/" 需要重命名的文件

比如需要重命名的几个文件:123.txt,124.txt,125.txt

rename "s/.txt$/.log/" *.txt
# 批量修改后缀为log,$标记行尾
rename "s/$/.log/" *.txt
# 批量添加后缀.log

rename "s/^/zs/" *.txt
# 批量加前缀zs,^标记行首
rename "s/^zs//" *.txt
# 批量删除添加的前缀zs

rename "s/AA/aa/" *
# 批量大写转小写

rename 's/ /_/g' *.txt
# 批量把把文件空格修改成_,比for加mv循环简单多了。

rename "s/[0-9]/zs$1/" *.txt
# 匹配一个数字,批量替换。当然还有很多正则表达式,自己需要什么就用什么。

2、mv重命名也是比较常用,如果需要批量重命名,可以配合for循环使用。

mv 旧文件名 新文件名

比如需要重命名的几个文件:123.txt,124.txt,125.txt

想改成:zs1.log,zs2.log,zs3.log,添加统一前缀,修改后缀,添加序号这样的格式:

i=1; for name in `ls -ltr| awk '{print $NF}'|grep .txt`;do mv $name zs$i.log;let i=i+1;done

# i=1,从1开始,也可以从其他序号开始。
# ls -ltr,按时间顺序列出文件,直接ls列出文件,容易改错名字。
# awk '{print $NF}' ,awk是按列打印,这是打印最后一列,就是文件名。
# grep .txt,查找.txt文件。有时候同一个文件夹里有其他文件,不希望改名。
# mv $name zs$i.log 修改文件名
# let i=i+1,开始循环批量改名。

3、如果你用的是zsh,也可以用zsh自带的重命名工具zmv,有时候也是比较方便也比较好理解的。

比如你想修改:zs1.log,zs2.log,zs3.log

改成:xwz1.txt,xwz2.txt,xwz3.txt

zmv '旧文件名' '新文件名'
autoload -U zmv
# 加载zmv,默认不加载,推荐添加到zsh启动脚本里.zshrc

zmv 'zs(*).log' 'xwz$1.txt'
# (*)部分就是,新名$1部分。比较适合文件名中存在相同内容的文件,标记起来也方便,改起来也比较简单。

几个方法用好了,批量改名也都比较方便,但多多少少也存在一些不足之处,主要还是要看重命名成什么格式的,需要重命名的文件名称都有什么特点,改起来才知道用什么方法比较快速方便。

退出移动版