Shell批量改名
========================================================================================
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
-v, --verboseVerbose: print names of files successfully renamed.
-n, --no-actNo Action: show what files would have been renamed.
-f, --forceForce: overwrite existing files.
简单的rename使用命令:
字母的替换
rename "s/AA/aa/" * //把文件名中的AA替换成aa
修改文件的后缀
rename "s/.html/.php/" * //把.html 后缀的改成 .php后缀
批量添加文件后缀
rename "s/$/.txt/" * //把所有的文件名都以txt结尾
批量删除文件名
rename "s/.txt//" * //把所有以.txt结尾的文件名的.txt删掉
一条命令:
rename "s/.JPG/.jpg/" *
就完成了全部工作。
========================================================================================
用法:
1.将你要改名的文件都放在同一个文件夹下,运行”ls -l > oldnames”,然后“vi oldnames”,这时候看到的大概是这个样子:
total 1224
drwxrwxr-x 3 yanpeng yanpeng 4096 Sep 17 16:13 app
drwxrwxr-x 2 yanpeng yanpeng 4096 May 19 2009 bin
drwxrwxr-x 2 yanpeng yanpeng 8192 Jan 26 16:40 docpay
2.输入”ctrl+v”,移动光标,选中要删除的那一堆内容,其实就是文件名前面的那些列,输入“d”,得到的文件大概为
app
bin
docpay
3.删除掉第一行的空行,保存退出vi,然后”cp oldnames newnames”。
4.修改newnames文件中想要改名的文件为新文件名
5.将change_name.sh脚本放在你的那个放置文件的夹下,运行./change_name.sh就可以了(注意有执行权限,加执行权限的方法chmod a+x change_name.sh)
change_name.sh脚本内容,拷贝下,存好就能用了
#!/bin/sh
OLDNAMES='oldnames'
NEWNAMES='newnames'
fileline=`sed -n '$=' $OLDNAMES`
echo $fileline
index=1
while [ $index -le $fileline ]
do
oldname=`sed -n "${index}p" $OLDNAMES`
newname=`sed -n "${index}p" $NEWNAMES`
mv $oldname $newname
index=`expr $index + 1`
done
========================================================================================
转自: