天天看点

Linux中批量修改文件名

Linux中批量修改文件名

有时候我们有一个目录下面的文件名都需要重新命令

如: 以下有十个学生完成的脚本,现在需要将finish改为ing

<code>[root@slave </code><code>test</code><code>]</code><code># touch student_{01..10}_finish.sh</code>

<code>[root@slave </code><code>test</code><code>]</code><code># ls student_*</code>

<code>student_01_finish.sh  student_03_finish.sh  student_05_f</code>

<code>student_02_finish.sh  student_04_finish.sh  student_06_finish.sh  student_08_finish.sh  student_10_finish.sh</code>

方法1: sed

<code>for</code> <code>f </code><code>in</code> <code>`</code><code>ls</code> <code>student_*` ; </code><code>do</code> <code>echo</code> <code>$f | </code><code>mv</code> <code>$f `</code><code>sed</code> <code>'s#finish#ing#g'</code><code>`;</code><code>done</code>

方法2: awk 字符串拼接的方法(在传递给bash)

测试:

<code>[root@slave </code><code>test</code><code>]</code><code># echo student_05_finish.sh | awk -F 'finish' '{ print "mv " $0 " " $1 "ing"$2}'</code>

<code>mv</code> <code>student_05_finish.sh student_05_ing.sh</code>

批量执行

<code>[root@slave test]# for f in `ls student*` ;do echo $f | awk -F 'finish' '{ print "mv " $0 " " $1 "ing"$2}';done | bash</code>

<code>[root@slave test]# ls student_*</code>

<code>student_01_ing.sh  student_03_ing.sh  student_05_ing.sh  student_07_ing.sh  student_09_ing.sh</code>

<code>student_02_ing.sh  student_04_ing.sh  student_06_ing.sh  student_08_ing.sh  student_10_ing.sh</code>

或:

<code>for</code> <code>f </code><code>in</code> <code>`</code><code>ls</code> <code>student*` ;</code><code>do</code> <code>echo</code> <code>$f | </code><code>mv</code> <code>$f `</code><code>awk</code> <code>-F </code><code>'finish'</code> <code>'{ print  $1 "ing" $2}'</code><code>`;</code><code>done</code>

方法三: rename命令,专业处理批量修改文件名的linux 命令

用法: man rename

<a href="http://s5.51cto.com/wyfs02/M00/7F/4C/wKiom1cY6HGzCQvcAAAveZ7PjPE296.png" target="_blank"></a>

<code>[root@slave test]# rename "finish" "ing" student_*</code>

本文转自残剑博客51CTO博客,原文链接http://blog.51cto.com/cuidehua/1766448如需转载请自行联系原作者

cuizhiliang

继续阅读