- 相干保举
Linux下批量点窜文件名的体例
在Linux环境下点窜文件名能够有差别的号令体例,比方rename、mv都能够停止点窜,若是用户正在领会这方面的常识,能够浏览下文领会Linux点窜文件名和批量点窜文件名的体例。
对单个的文件,能够间接操纵号令,那若是有大量的近似格局的文件名须要点窜成其余格局的,该若何呢?
比方某次测试后,保管的文件为 Lan1.txt,Lan2.txt,……Lan100.txt
这一百个文件须要在后面增加前缀变成近似 ch7_Lan1.txt,若是你还想操纵mv来一个一个多疾苦啊。
以后文件夹下,文件点窜有四种体例:
1、操纵while Loop加${//}来完成Lan到ch7_Lan的替代。
01find . -name "Lan*txt" -type f | read files02do03new=04mv05done复制代码
find . -name "Lan*txt" -type f | read filesdonew=mvdone
2、充实操纵awk的分开符功效来完成:
01ls *Lan* | awk 'BEGIN{FS="Lan";OFS="ch7_Lan"}{printf "mv "$0" ";$1=$1;print $0}' | sh复制代码
ls *Lan* | awk 'BEGIN{FS="Lan";OFS="ch7_Lan"}{printf "mv "$0" ";$1=$1;print $0}' | sh
起首,点窜FS和OFS,输入和输入的分开符。
其次,操纵awk中的号令,拼接“mv Lan1.txt ch7_Lan1.txt”这条号令。
最初,操纵|sh来履行一个shell号令来完成mv举措。
此中,$1=$1是必须的,这个是完成Lan===> ch7_Lan的关头(实在是能够操纵$2=$2等来替代,只需一个赋值举措罢了)
奇异的是,莫非不赋值举措,分开符的转变就不能检测出来么?
3、操纵awk的内置号令,gsub和system来完成替代和号令履行。
01ls "*Lan*" | awk '{org=$0;gsub("Lan", "ch7_Lan");system("mv "org" "$1)}'复制代码
ls "*Lan*" | awk '{org=$0;gsub("Lan", "ch7_Lan");system("mv "org" "$1)}'
起首保管原始的数据。
其次点窜 Lan为 ch_Lan
最初履行mv举措
此中,最初system号令"mv "org""须要操纵""来标记。
并且org也须要"",并且不能操纵$org
1、对awk号令中的变量,不须要用$来援用。
2、在system()中,变量须要操纵""来标识,不然就被当做字符串来处置。
3、若是对变量停止$来停止援用,就会呈现两种环境:
3.1、一般环境下,能够被当做地位参数来援用。比方 NF表现以后行的记实个数。比方echo "a b c d" | awk '{print NF, $NF}',这个会打印两个变量,第一个是NF自身,其值为4;第二个是第四个地位参数,也便是$4,也便是d
3.2、非一般环境下:
3.2.1、若是变量自身便是个字符串。比方echo "a b c d" | awk '{va=“varA“;print va, $va}',由于后一个参数$va,由于va是个字符串,是以$va打印的便是$0
3.2.2、若是变量自身便是个数字,可是该值大于NF。 比方echo "a b c d" | awk '{va="varA";vb=6;print va, $va, vb, $vb, 1}',由于$vb相称因而$6,可是地位参数$6不,是以打印的便是个空字符。
01[martin@TSPerPacketsTest]$ echo "a b c d" | awk '{print NF, }'024 d03[martin@TSPerPacketsTest]$ echo "a b c d" | awk '{va="varA";print va, }'04varA a b c d05[martin@TSPerPacketsTest]$ echo "a b c d" | awk '{va="varA";vb=6;print va, , vb, , 1}'06varA a b c d 6 1复制代码
[martin@TSPerPacketsTest]$ echo "a b c d" | awk '{print NF, }'4 d[martin@TSPerPacketsTest]$ echo "a b c d" | awk '{va="varA";print va, }'varA a b c d[martin@TSPerPacketsTest]$ echo "a b c d" | awk '{va="varA";vb=6;print va, , vb, , 1}'varA a b c d 6 1
4、操纵sed中的s来停止替代,而后操纵e号令来履行:
01[martin@TSPerPacketsTest]$ ls *Lan* | sed -r -n 's/(.*)Lan(.*)/mv & 1ch_Lan2/e'复制代码
[martin@TSPerPacketsTest]$ ls *Lan* | sed -r -n 's/(.*)Lan(.*)/mv & 1ch_Lan2/e'
对sed的选项,操纵 -r和 -n
-r 来启用后续能够操纵 command,比方 mv
-n 来封闭 patten space中内容的显现。
对sed的 command,操纵e。如斯在操纵s号令完成 pattern space中 Lan到 ch7_Lan的点窜后,启动shell来履行 pattern space中的 mv指令。
若是这里操纵 p,标记仅仅显现 pattern space中的指令罢了。
若是对某目次下的一切文件,停止文件名点窜,有两种体例:
1、聚集awk的 FS/OFS和 gsub/system来完成。有点近似于综合上述2,3两种体例。
01[martin@TSPerPacketsTest]$ find . -name "*Lan*" -type f | awk 'BEGIN{FS="/";OFS="/"}{org=$0;gsub("Lan", "ch7_Lan", );system("echo "org" "$0)}'复制代码
[martin@TSPerPacketsTest]$ find . -name "*Lan*" -type f | awk 'BEGIN{FS="/";OFS="/"}{org=$0;gsub("Lan", "ch7_Lan", );system("echo "org" "$0)}'
为了完成一切目次下的文件名停止点窜,可是又不影响途径上文件夹名。
起首,标记FS和OFS都为"/"。
其次,操纵gsub时辰,指定仅仅点窜以后行中最初一个记实,操纵$NF来指定。
固然,对FS和OFS的指定,能够不安排在 BEGIN中完成,比方:
01[martin@TSPerPacketsTest]$ find . -name "*Lan*" -type f | awk -vF=/ -vOFS=/ '{org=$0;gsub("Lan", "ch7_Lan", );system("echo "org" "$0)}'02[martin@TSPerPacketsTest]$ find . -name "*Lan*" -type f | awk -F/ -vOFS=/ '{org=$0;gsub("Lan", "ch7_Lan", );system("echo "org" "$0)}'复制代码
[martin@TSPerPacketsTest]$ find . -name "*Lan*" -type f | awk -vF=/ -vOFS=/ '{org=$0;gsub("Lan", "ch7_Lan", );system("echo "org" "$0)}'[martin@TSPerPacketsTest]$ find . -name "*Lan*" -type f | awk -F/ -vOFS=/ '{org=$0;gsub("Lan", "ch7_Lan", );system("echo "org" "$0)}'
2、或操纵 sed。
01[martin@TSPerPacketsTest]$ find . -name "*Lan*" -type f | sed -r -n 's/(.*)([^/]*)Lan([^/]*)$/mv & 12ch7_Lan3/e'复制代码
[martin@TSPerPacketsTest]$ find . -name "*Lan*" -type f | sed -r -n 's/(.*)([^/]*)Lan([^/]*)$/mv & 12ch7_Lan3/e'
此中的各个 option和 command参数,上述都已有先容了。
这里,针对文件夹名和文件名,操纵了简略的sed内置的正则抒发式来停止婚配罢了,来完成仅仅对文件名的点窜。
以上步骤在Linux点窜文件名和批量点窜文件名的完成体例,是在shell中操纵find、exec、xargs、mv号令组合批量替代文件名中的字符串。
【Linux下批量点窜文件名的体例】相干文章:
PHP剧本点窜Linux体系口令的体例09-05
EXCEL批量点窜数据08-20
linux下卸载apache体例先容09-12
在Linux体系下装置QQ的体例07-22
linux办事器点窜ssh默许端口体例05-27
FreeBSD下点窜装置源的体例10-06