rename命令用字符串替换的方式批量改变文件名
语法:
rename(参数)
参数:
原字符串:将文件名需要替换的字符串,必须得是确定的字符,如果写*,可能会删除第一个文件
目标字符串:将文件名中含有的原字符替换成目标字符串,
文件:指定要改变文件名的文件列表,可以用*代替目录下的所有文件
实例:
# ll old.sh -rw-r--r--. 1 root root 1908 Mar 30 09:09 old.sh# rename old.sh new.sh old.sh # ll new.sh -rw-r--r--. 1 root root 1908 Mar 30 09:09 new.sh
rename支持通配符
?:可以替代单个字符*:可以替代多个字符[charset]:可以替代charset集合中的任意单个字符
?的用法:
# touch ABC{1..3}# lltotal 0-rw-r--r--. 1 root root 0 Mar 30 09:15 ABC1-rw-r--r--. 1 root root 0 Mar 30 09:15 ABC2-rw-r--r--. 1 root root 0 Mar 30 09:15 ABC3# rename ABC ABCD ABC?# lltotal 0-rw-r--r--. 1 root root 0 Mar 30 09:15 ABCD1-rw-r--r--. 1 root root 0 Mar 30 09:15 ABCD2-rw-r--r--. 1 root root 0 Mar 30 09:15 ABCD3
??的用法:
# rename ABC A ABC??# lltotal 0-rw-r--r--. 1 root root 0 Mar 30 09:15 AD1-rw-r--r--. 1 root root 0 Mar 30 09:15 AD2-rw-r--r--. 1 root root 0 Mar 30 09:15 AD3#
*的用法:
# lltotal 0-rw-r--r--. 1 root root 0 Mar 30 09:27 ABC1-rw-r--r--. 1 root root 0 Mar 30 09:27 ABC2-rw-r--r--. 1 root root 0 Mar 30 09:27 ABC3
# rename A D A*# lltotal 0-rw-r--r--. 1 root root 0 Mar 30 09:27 DBC1-rw-r--r--. 1 root root 0 Mar 30 09:27 DBC2-rw-r--r--. 1 root root 0 Mar 30 09:27 DBC3
[]也可以和*结合使用:
# lltotal 0-rw-r--r--. 1 root root 0 Mar 30 09:27 DBC1-rw-r--r--. 1 root root 0 Mar 30 09:27 DBC2-rw-r--r--. 1 root root 0 Mar 30 09:27 DBC3# rename D A D[BC]*# lltotal 0-rw-r--r--. 1 root root 0 Mar 30 09:27 ABC1-rw-r--r--. 1 root root 0 Mar 30 09:27 ABC2-rw-r--r--. 1 root root 0 Mar 30 09:27 ABC3#
rename支持正则表达式:很显然,用不了,因为服务器上的rename是C语言版的,perl版本才支持正则.
关于rename的几个小代码:
# find -name "a*" -print | while read name; do echo $name ; rename 's/a/b/' $name