本文主要介绍Linux下,将对文件夹下所有的没有扩展名或符合指定规则的文件,使用命令或脚本对文件进行批量重命名的方法。

1、使用while和find命令实现

1)命令

find . -type f -not '(' -name '*.txt' -or -name '*.json' ')' | while read -r path; do mv -v "${path}" "${path}.txt"; done

2)脚本

#!/bin/bash
while read -r path; do
  mv -v "${path}" "${path}.txt"
done < <(find . -type f -not '(' -name '*.txt' -or -name '*.json' ')' )

2、使用for实现

定一个脚本通过for实现:

#!/bin/bash
DIR=""
cd $DIR
for FILE in `ls $DIR`
do
mv $FILE $FILE.txt
done

3、使用rename命令实现

Ubuntu下rename可以使用正则表达式,其它系统版本中如不支持,可以尝试下载安装对应的版本。原因就是rename是perl版本的支持正则,如rename是c版本的,则不支持正则。

用法

rename [options] "s/oldname/newname/" file

选项:

-v 将重命名的内容都打印到标准输出,v 可以看成 verbose

-n 测试会重命名的内容,将结果都打印,但是并不真正执行重命名的过程

-f force 会覆盖本地已经存在的文件

-h -m -V 分别为帮助,帮助,版本

? 可替代单个字符

* 可替代多个字符

注意:当命令中最后 file 为 * 时表示,匹配当前文件夹下所有文件,如果为 ? 时则匹配只有一个字符的文件名。

rename 's/(pic[.][A-Z0-9]{18}[.][A-Z0-9]{10})/\1.txt/g' *

推荐文档