当前位置: 技术问答>linux和unix
50分求一个批量改名的小脚本
来源: 互联网 发布时间:2015-09-02
本文导语: 需要一个小的perl或者shell程序能将某一个目录下的文件名作批量修改 例如:一个根目录有很多子目录,层数未知,每个目录下有aaa,bbb,ccc等文件,我现在要将目录下所有的aaa改称111,bbb改称222,ccc改称333,改名后...
需要一个小的perl或者shell程序能将某一个目录下的文件名作批量修改
例如:一个根目录有很多子目录,层数未知,每个目录下有aaa,bbb,ccc等文件,我现在要将目录下所有的aaa改称111,bbb改称222,ccc改称333,改名后文件的路径不变,不符合的文件不作改动
环境是freebsd,上面有csh,bash和perl,我刚接触,什么都不懂,应该很简单吧
很急,来不及找资料了,请各位帮帮忙
另,我想学shell和perl的话需要看什么书和资料,请各位推荐,另外给分
例如:一个根目录有很多子目录,层数未知,每个目录下有aaa,bbb,ccc等文件,我现在要将目录下所有的aaa改称111,bbb改称222,ccc改称333,改名后文件的路径不变,不符合的文件不作改动
环境是freebsd,上面有csh,bash和perl,我刚接触,什么都不懂,应该很简单吧
很急,来不及找资料了,请各位帮帮忙
另,我想学shell和perl的话需要看什么书和资料,请各位推荐,另外给分
|
BASH 脚本一个
修改 BASEDIR , 搜索路径根目录
SRCFILE , 原文件
DESFILE , 替换的目标文件
执行前需要手动修改。
####################################################################
#!/bin/bash
#find and replace shell
BASEDIR=/tmp/testdir
SRCFILE=AAA
DESFILE=111
if [ -d $BASEDIR ]
then
cd $BASEDIR
FILELOCLIST=`find ./ -name $SRCFILE -type f -exec dirname {} ;` # gen filelocation
for DIRNAME in $FILELOCLIST
do
if [ -e $DIRNAME/$DESFILE ]
then
echo "ERR: [$DIRNAME/$SRCFILE] Convert Target $DIRNAME/$DESFILE already exists , skipped."
else
echo "Moving $DIRNAME/$SRCFILE ---> $DIRNAME/$DESFILE"
mv $DIRNAME/$SRCFILE $DIRNAME/$DESFILE
fi
done
else
echo -e "$BASEDIR does not exist!n"
fi
####################################################################
for recommendation:
BASH : O'Reilly : Learning Bash
Perl : SAMS: Learing Perl in 24 Hours
O'Reilly: Learning Perl
Perl Programming Language
修改 BASEDIR , 搜索路径根目录
SRCFILE , 原文件
DESFILE , 替换的目标文件
执行前需要手动修改。
####################################################################
#!/bin/bash
#find and replace shell
BASEDIR=/tmp/testdir
SRCFILE=AAA
DESFILE=111
if [ -d $BASEDIR ]
then
cd $BASEDIR
FILELOCLIST=`find ./ -name $SRCFILE -type f -exec dirname {} ;` # gen filelocation
for DIRNAME in $FILELOCLIST
do
if [ -e $DIRNAME/$DESFILE ]
then
echo "ERR: [$DIRNAME/$SRCFILE] Convert Target $DIRNAME/$DESFILE already exists , skipped."
else
echo "Moving $DIRNAME/$SRCFILE ---> $DIRNAME/$DESFILE"
mv $DIRNAME/$SRCFILE $DIRNAME/$DESFILE
fi
done
else
echo -e "$BASEDIR does not exist!n"
fi
####################################################################
for recommendation:
BASH : O'Reilly : Learning Bash
Perl : SAMS: Learing Perl in 24 Hours
O'Reilly: Learning Perl
Perl Programming Language
|
可以试试下面的脚本
#!/bin/bash
if [ $# -ne 3 ];then
echo "The parameter number is wrong, it is four!"
exit 1
else
find $1 -name $2 > tempfile1
sed 's/^/mv /g' tempfile1 > tempfile2
sed "s/$2/$3/g" tempfile1 > tempfile3
paste tempfile2 tempfile3 > renamefile
rm -f tempfile1 tempfile2 tempfile3
chmod +x renamefile
./renamefile
rm -f renamefile
fi
在命令行上面输入命令的格式:
./脚本名称 包含你要改名的文件的目录 需要改名的文件名称 改名后的文件名称
#!/bin/bash
if [ $# -ne 3 ];then
echo "The parameter number is wrong, it is four!"
exit 1
else
find $1 -name $2 > tempfile1
sed 's/^/mv /g' tempfile1 > tempfile2
sed "s/$2/$3/g" tempfile1 > tempfile3
paste tempfile2 tempfile3 > renamefile
rm -f tempfile1 tempfile2 tempfile3
chmod +x renamefile
./renamefile
rm -f renamefile
fi
在命令行上面输入命令的格式:
./脚本名称 包含你要改名的文件的目录 需要改名的文件名称 改名后的文件名称