上海龙凤419

操纵体系

Linux下批量点窜文件名的体例

时辰:2024-11-07 02:58:53 操纵体系 我要投稿
  • 相干保举

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下批量点窜文件名的体例】相干文章:

用fireworks批量对图片称号点窜的体例03-21

PHP剧本点窜Linux体系口令的体例09-05

在Linux体系中批量增加用户的体例讲授教程09-11

PHP剧本点窜Linux或Unix体系口令体例10-18

Linux操纵体系点窜时辰和点窜时区的体例08-29

EXCEL批量点窜数据08-20

linux下卸载apache体例先容09-12

在Linux体系下装置QQ的体例07-22

linux办事器点窜ssh默许端口体例05-27

FreeBSD下点窜装置源的体例10-06