rename用法(rename 's/ /_/g' * )

时间:2021-10-28 16:42:56

在Windows 系统中,无论我们要重新命名资料夹或是档案, 
通常都点下右键后选择重新命名即可,


如果对快捷键比较熟,直接按下F2 可以更快地达成目的。 
而在Linux系统中,重新命名资料夹或档案也可以透过同一个指令来达成,这个指令是mv ! mv 是move 的缩写,他除了移动档案资料夹的功能外也可以同时重新命名。 
所以其实仔细想想拿他来重新命名档案也不会很难理解啦, 
重新命名时只是把档案移动到同一个资料夹,然后趁着移动时把档名给顺便改了! 

说了这么多那mv 指令到底该怎么使用呢?

 

Java代码   rename用法(rename 's/ /_/g' * )
  1. # mv $1 $2  
  2. # $1: 旧档案或资料夹名称  
  3. # $2: 新的档案或资料夹名称  
  4. mv oldname.txt newname.txt  

 

 

上面的方法是用来重新命名单一档案或资料夹, 
但是当一个目录资料夹底下有很多有特定规则档名的档案需要改名, 
例如相机产生的档案IMG001.jpg~IMG999.jpg 超多档案, 
这绝对不可能直接用mv 一个个慢慢敲来改名的。 
这时候另一个指令就可以派上用场了, 
rename 这个指令可以用来批次修改档名共同的部分,使用方式如下:

 

Java代码   rename用法(rename 's/ /_/g' * )
  1. # rename $1 $2 $3  
  2. # $1: 要被取代的关键字  
  3. # $2: 新的关键字  
  4. # $3: 档名符合这个规则的才取代  
  5. # 把IMG001.jpg, IMG002.jpg… 换成img001.jpg, img002.jpg…   
  6.  rename IMG img IMG*  
  7.   
  8.  # 把所有.htm 档案改成.html  
  9.  rename .htm .html *.htm  
  10.   
  11.  # 把档案foo1, ..., foo9, foo10, ..., foo278.  
  12.  # 改成foo001, ..., foo009, foo010, ..., foo278.  
  13.  rename foo foo0 foo?  
  14.  rename foo foo0 foo??  

 

 

来源:http://werdna1222coldcodes.blogspot.com/2012/04/linux-scriptmv-rename.html

 

rename

相关命令: mv
rename 用于 对文件进行命名管理,可进行批量命名并支持正则表达式, 
rename命令存在两个版本用法上有所区别 
一个是 C语言版本支持通配符,
另一个是 Perl版本.支持正则表达式

参数

-n    操作预览,在不更改文件名称情况下,显示执行后的结果
-f    强制执行
 
【常用通配符说明】
 ?    表示一个任意字符
 *    表示一个或一串任意字符
-------------------------------------------------
【常用正则表达式符号说明】
^    匹配输入的开始位置
$    匹配输入的结尾
.    匹配除换行符外的任意字符
+    匹配前一个字符一次或多次 例如,"zo+"可以匹配"zoo",但不匹配"z"
[a-z]    表示某个范围内的字符,例如,"[a-z]"匹配"a"与"z"之间的任何一个小写字母字符。
[^m-z]    否定的字符区间。与不在指定区间内的字符匹配。

 

Java代码   rename用法(rename 's/ /_/g' * )
  1. [root@localhost www]# rename 's/\.sh/\.php/' *        #将当前目录下.sh后缀的文件,变成.php  
  2.   
  3. [root@localhost www]# rename 's/$/\.bak/' /home/www/*.php     #给www目录下的.php加上bak后缀  
  4.   
  5. [root@localhost www]# rename 's/^/bak_/' *.bin     #给当前目录下的.bin后缀文件加上bak_前缀  
  6.   
  7. [root@localhost www]# rename 's/\.bin$//' *       #批量删除当前目录下所有文件的.bin 后缀  
  8.   
  9. [root@localhost www]# rename 's/A-Z/a-z/' *       #修改当前目录所有文件名为小写  

 

 

其他方法:

C代码   rename用法(rename 's/ /_/g' * )
  1. for i in `ls`; do mv -f $i `echo $i | sed 's/oldstring/newstring/'`;  done  

 

或者

Java代码   rename用法(rename 's/ /_/g' * )
  1. #使用perl语言  
  2. find  ./ -name '*.sh' | xargs perl -pi -e 's|string1|string2|g'  
  3.   
  4. #使用sed程序  
  5. find  ./ -name '*.sh' | xargs sed -i 's/string1|string2/g'  

 上面的'*.sh'替换成需要修改的文件名,string1是需要修改的字符串,string2是修改后的字符串。