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' *