shell批量修改檔名

2021-09-20 19:19:26 字數 3665 閱讀 3302

#!/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 *.`

domv $files `echo "$filests" `

done

2. 同上

mv $files $ts

3. 同上

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

4. file =>file.txt

mv $files $files.txt

5. *.04 => *04.txt

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

或者mv $files `echo $.txt|sed 's/\.//1' `

b 改字尾(.old => .new)

1. rename

rename .old .new *

2.mv $files $.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$

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

##########

ls |awk ''|sh

for i in *.bil;do

mv "$i" "$(echo $i|awk -f. '')"

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

fibegindate=$1

enddate=$2

date

date_s=`date +%y%m%d`

filelist=./filelist.$

test -f $ && rm -f $

ls *.bil | grep -v ssp | grep -v filelist | grep -v yzl >$

echo "start rename, please wait..."

echo "begindate:$begindate"

echo "enddate :$enddate"

for filename in `cat $`

dothqsrq=`echo $ | cut -c1-8`

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

then

echo $ >> filelist.$.end

tmp_filename=`echo $ | cut -c1-10`

cp ./$ ./after/$_ssp.bil

fidone

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 $;done

其中$是將變數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.' '' >$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 '' | sh

ls *.bil | tr -d ".bil" | xargs -i + mv +.bil +_tmp.bil

shell 批量重新命名以「.log」結尾的檔案

pre="m";

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

doif [ -f $filename ]

then

if [ $ != $filename ]

then

mv $filename ./$pre$;

fifi

done

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

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

#!/bin/ksh

ls *.aaa | while read name

doecho $name $.bbb

done

先測一下上面的命令,沒問題的話把 echo 換成 mv 就行了。

#!/bin/sh 

ls | while read name 

do echo $name | grep ksh 

mv $name $name.$1 #$1是字尾名 

done

shell 批量修改檔名

當前目錄有n多個 檔案,需要按從小到大排序,然後改名成 1.n.解法如下 整理來自於論壇 方法一 root squid mkdir ls lrs total 24 rw r r 1 root root 7 jun 1 01 19 test1.txt rw r r 1 root root 8 jun ...

shell 批量修改檔名

擷取檔名的前兩個字元 fname 擷取檔案的後四個字元 bname name echo name 1 bc 拼接成檔名 filename fname name bname 更改檔名 擷取檔名的前兩個字元 fname 擷取檔案的後四個字元 bname name echo name 1 bc 拼接成檔名...

shell指令碼 批量修改檔名

參考鏈結1 shell指令碼 批量修改檔名 刪除檔名中字元 參考鏈結2 linux shell 字串操作詳解 長度,讀取,替換,擷取,連線,對比,刪除,位置 參考鏈結3 每天乙個linux命令 21 find命令之xargs 參考鏈結5 shell 學習第十天 sed 查詢與替換 批量改名,增加字元...