shell批量修改文件名

转自:http://zhguiqiang.blog.163.com/blog/static/9993752201021151628822/

shell批量修改文件名

 

最简单:rename file file1 file??

自己写的:

#!/bin/bash

#NeoX

folder=/root/folder

cd $folder

num=0

for filename in `ls $folder`; do

 let  num=$num+1

 #old filename:prefix+with . suffix, new filename:continuous digit +with . suffix

 mv $filename  $num`echo $filename|sed 's//([a-zA-Z]*_*[0-9]*/)/./(./)//./2/'`

done

exit

 

网上收集的:

A 加后缀

1.问题:同以目录下有海量以日期命名的文件,其中有的有后缀,有的以点结尾,如20020101.,20020102.,……,20020101.td,20020102.td……

要求: 把所有以点结尾的加上后缀.ts

我的方法:

  #!/bin/bash

  for files in `ls *.`

  do

        mv $files `echo "$filests" `

  done

2. 同上

     mv  $files ${files}ts

3. 同上

     mv  $files  `$files.ts|sed 's//.//' `

4. file =>file.txt

       mv  $files  $files.txt

5. *.04  => *04.txt

    mv $files $(echo ${files}.txt|sed 's//.//1')

    或者

   mv $files  `echo ${files}.txt|sed 's//.//1' `

B 改后缀(.old => .new)

1. rename

     rename .old .new  *

2.

    mv $files ${file%.old}.new

3.

    mv $files `echo $files|tr .old .new`

4.

    mv $files `echo $files|sed 's//.old//.new/' `

   

C 去后缀 (*.dat => *)

1.  mv $files `echo $files |sed 's//.dat//' `

2.  mv $files  `echo $files|tr .dat  (4空格)`

D 改前缀 (re* => un*)

1.  mv $files un${$files#re}

2.  mv $files `echo $files | tr re un`

##########

ls |awk '{printf("mv %s %s_tmp.BIL/n"),$0,$0}'|sh

for i in *.BIL;do

    mv "$i" "$(echo $i|awk -F. '{sub(/.*/,"&_tmp.",$1);print}')"

done

#!/bin/sh

#程序名: yzl_batch_rename.sh

#功能  :批量改名;

#版本  :20040914 v1.00

#yzl

if [ $# -ne 2 ]

then

       echo "Version: v1.00"

       echo "Usage  :`basename $0` [begindate] [enddate]"

       echo "Example: `basename $0` 20040521 20040620"

       echo ""

       exit 0

fi

begindate=$1

enddate=$2

date

DATE_S=`date +%Y%m%d`

FILELIST=./filelist.${DATE_S}

test -f ${FILELIST} && rm -f ${FILELIST}

ls *.BIL | grep -v ssp | grep -v filelist | grep -v yzl >${FILELIST}

echo "START rename, please wait..."

echo "begindate:$begindate"

echo "enddate  :$enddate"

for filename in `cat ${FILELIST}`

do

        thqsrq=`echo ${filename} | cut -c1-8`

        if [ $thqsrq -ge $begindate -a $thqsrq -le $enddate ]

        then

                echo ${filename} >>  filelist.${DATE_S}.end

                tmp_filename=`echo ${filename} | cut -c1-10`

                cp ./${filename} ./after/${tmp_filename}_ssp.BIL

        fi

done

echo "BATCH RENAME DONE!"

for i in *.bil;do  mv "$i" "$(echo $i|sed 's/[0-9][0-9]*/&_tmp/')"; done

rename  .bil  _tmp.bil  *.bil

for i in *.BIL ;do mv $i ${i/.BIL/_tmp.BIL};done

其中${i/.BIL/_tmp.BIL}是将变量i中的字符串.BIL替换为_tmp.BIL

#######从配置文件中读取配置选项值#######

########BBY##########################

src_dir=/home02/bill07   #要修改的文件所在的目录,要根据实际修改此处

dest_dir=                #如果有必要可以加上目的目录

cd $src_dir

echo "begin   at `date /"+%Y/%m/%d %H:%M:%S/"`." > $src_dir/mvbill.log

ls *_3.dat|awk -F'_3.' '{print "mv "$0" "$1"_7.dat"}' >$src_dir/mv.sh

chmod +x mv.sh

cat mv.sh>>$src_dir/mvbill.log

mv.sh>>$src_dir/mvbill.log

#cp -p  $crc_dir/*_7.dat $dest_dir/

echo "end   at `date /"+%Y/%m/%d %H:%M:%S/"`." >> $src_dir/mvbill.log

SCO5.0.6

#/bin/sh

ls | sed 's/^.........../mv &.BIL &_tmp/' | sh

ls | cut -f1 -d'.' | awk '{ print "mv "$1".BIL "$1"_tmp.BIL" }' | sh

ls *.BIL | tr -d ".BIL" | xargs -I + mv +.BIL +_tmp.BIL

Shell 批量重命名以“.log”结尾的文件 

pre="M";

for filename in `find . -name "*"`

do

  if [ -f $filename ]

  then

     if [ ${filename%.log} != $filename ]

     then    

      mv $filename ./$pre${filename#./};

     fi

  fi

done

 find -type f| xargs -i -n1 mv {} {}a

find . -type f -exec mv {} "{}ts" /;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值