shell批量修改文件名

简介:

#!/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

 

 

 

要求: 把所有以点结尾的加上后缀.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" \;

 

 

 

 

 

#!/bin/ksh
ls *.aaa | while read NAME
do
echo $NAME ${NAME%\.aaa}.bbb
done

先测一下上面的命令,没问题的话把 echo 换成 mv 就行了。

 

 

 

#!/bin/sh 

ls | while read NAME 
do 
echo $NAME | grep ksh 
mv $NAME $NAME.$1 #$1是后缀名 

done










本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1541362,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
存储 Shell 编译器
【Shell 编程设计】设计一个批量修改目录中的文件名的shell脚本
【Shell 编程设计】设计一个批量修改目录中的文件名的shell脚本
18 0
|
6月前
|
运维 Shell
运维(05)- shell文件名代换(Globbing)
运维(05)- shell文件名代换(Globbing)
26 0
|
9月前
|
Shell
Shell mv 修改文件名、扩展名、文件夹名
Shell mv 修改文件名、扩展名、文件夹名
60 0
|
11月前
|
Shell
shell脚本获取当前脚本的文件名
shell脚本获取当前脚本的文件名
145 0
|
Shell
shell 获取到文件夹下的文件名
shell 获取到文件夹下的文件名
48 0
|
Shell
SHELL脚本递归循环,文件名包含空格的处理办法
SHELL脚本递归循环,文件名包含空格的处理办法
162 0
|
Shell
用shell把所有文件名修改为小写
用shell把所有文件名修改为小写
108 0
|
Shell Linux
LINUX SHELL如何递归访问目录(处理包含空格的文件名)
LINUX SHELL如何递归访问目录(处理包含空格的文件名)
159 0
|
Shell
SHELL中从变量中截取后缀、文件名、目录名
SHELL中从变量中截取后缀、文件名、目录名
134 0
Shell脚本常用练习(1)--输出当前目录下的文件名
Shell脚本常用练习(1)--输出当前目录下的文件名
Shell脚本常用练习(1)--输出当前目录下的文件名