系统小窝欢迎您

电脑公司 深度技术
当前位置:系统小窝 > 系统教程 > Linux教程 >

Linux文件名字批量修改步骤 Linux修改文件名的方法

时间:2021-04-09 来源:来吧老妹 人气:

在Linux环境下修改文件名可以有不同的命令方式,比如rename、mv都可以进行修改,如果用户正在了解这方面的知识,可以阅读下文了解Linux修改文件名以及批量修改文件名的方法。

对于单个的文件,可以直接使用命令,那如果有大量的类似格式的文件名需要修改成其他格式的,该如何呢?

比如某次测试后,保存的文件为 Lan1.txt,Lan2.txt,hellip;hellip;Lan100.txt

这一百个文件需要在前面添加前缀变成类似 ch7_Lan1.txt,如果你还想使用mv来一个一个多痛苦啊。

当前文件夹下,文件修改有四种方式:

1、使用while Loop加${//}来实现Lan到ch7_Lan的替换。

find . -name ;Lan*txt; -type f | read files do new= mv done

2、充分利用awk的分隔符功能来实现:

ls *Lan* | awk #39;BEGIN{FS=;Lan;;OFS=;ch7_Lan;}{printf ;mv ;$0; ;;$1=$1;print $0}#39; | sh

首先,修改FS和OFS,输入和输出的分隔符。

其次,使用awk中的命令,拼接;mv Lan1.txt ch7_Lan1.txt;这条命令。

最后,使用|sh来执行一个shell命令来完成mv动作。

其中,$1=$1是必须的,这个是完成Lan=== ch7_Lan的关键(其实是可以使用$2=$2等来替换,只要一个赋值动作而已)

奇怪的是,难道没有赋值动作,分隔符的改变就不能检测出来么?

3、使用awk的内置命令,gsub和system来实现替换和命令执行。

ls ;*Lan*; | awk #39;{org=$0;gsub(;Lan;, ;ch7_Lan;);system(;mv ;org; ;$1)}#39;

首先保存原始的数据。

其次修改 Lan为 ch_Lan

最后执行mv动作

其中,最后system命令;mv ;org;;需要使用;;来标记。

而且org也需要;;,并且不能使用$org

1、对于awk命令中的变量,不需要用$来引用。

2、在system()中,变量需要使用;;来标识,否则就被当成字符串来处理。

3、如果对变量进行$来进行引用,就会出现两种情况:

3.1、正常情况下,可以被当成位置参数来引用。比如 NF表示当前行的记录个数。比如echo ;a b c d; | awk #39;{print NF, $NF}#39;,这个会打印两个变量,第一个是NF本身,其值为4;第二个是第四个位置参数,也就是$4,也就是d

3.2、非正常情况下:

3.2.1、如果变量本身就是个字符串。比如echo ;a b c d; | awk #39;{va=;varA;;print va, $va}#39;,因为后一个参数$va,由于va是个字符串,因此$va打印的就是$0

3.2.2、如果变量本身就是个数字,但是该值大于NF。 比如echo ;a b c d; | awk #39;{va=;varA;;vb=6;print va, $va, vb, $vb, 1}#39;,因为$vb相当于是$6,但是位置参数$6没有,因此打印的就是个空字符。

[martin@TSPerPacketsTest]$ echo ;a b c d; | awk #39;{print NF, }#39; 4 d [martin@TSPerPacketsTest]$ echo ;a b c d; | awk #39;{va=;varA;;print va, }#39; varA a b c d [martin@TSPerPacketsTest]$ echo ;a b c d; | awk #39;{va=;varA;;vb=6;print va, , vb, , 1}#39; varA a b c d 6 1

4、使用sed中的s来进行替换,然后使用e命令来执行:

[martin@TSPerPacketsTest]$ ls *Lan* | sed -r -n #39;s/(.*)Lan(.*)/mv ch_Lan/e#39;

关于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两种方式。

[martin@TSPerPacketsTest]$ find . -name ;*Lan*; -type f | awk #39;BEGIN{FS=;/;;OFS=;/;}{org=$0;gsub(;Lan;, ;ch7_Lan;, );system(;echo ;org; ;$0)}#39;

为了实现所有目录下的文件名进行修改,但是又不影响路径上文件夹名。

首先,标记FS和OFS都为;/;。

其次,使用gsub时候,指定仅仅修改当前行中最后一个记录,使用$NF来指定。

当然,对于FS和OFS的指定,可以不放置在 BEGIN中实现,比如:

[martin@TSPerPacketsTest]$ find . -name ;*Lan*; -type f | awk -vF=/ -vOFS=/ #39;{org=$0;gsub(;Lan;, ;ch7_Lan;, );system(;echo ;org; ;$0)}#39; [martin@TSPerPacketsTest]$ find . -name ;*Lan*; -type f | awk -F/ -vOFS=/ #39;{org=$0;gsub(;Lan;, ;ch7_Lan;, );system(;echo ;org; ;$0)}#39;

2、或者使用 sed。

[martin@TSPerPacketsTest]$ find . -name ;*Lan*; -type f | sed -r -n #39;s/(.*)([^/]*)Lan([^/]*)$/mv ch7_Lan/e#39;

其中的各个 option和 command参数,上述都已经有介绍了。

这里,针对文件夹名和文件名,使用了简单的sed内置的正则表达式来进行匹配而已,来实现仅仅对文件名的修改。

以上步骤在Linux修改文件名以及批量修改文件名的实现方式,是在shell中使用find、exec、xargs、mv命令组合批量替换文件名中的字符串。

相关文章

  • Linux系统文件权限的设置技巧

    Linux系统文件权限的设置技巧

    不知道大家知不知道Linux系统,使用Linux系统的用户应该比较少,因为使用Linux系统的用户很多都是开发人员。其实Linux系统和Windows系统有很多相似的地方,...
    2011-08-13 10.08.56
  • 如何修改Linux文件系统的权限及安全设置

    如何修改Linux文件系统的权限及安全设置

    如果文件系统的权限设置不合理,就会威胁系统的安全,所以当运维人员遇到不能修改及删除文件的情况,就要对文件的的权限进行修改和设置了,下面小...
    2014-12-12 03.12.02
  • Linux系统中修改/etc/profile文件的方法

    Linux系统中修改/etc/profile文件的方法

    在Linux系统中etc/profile文件一般是不能更改的,想要更改etc/profile文件就要用一些特殊的技巧。本文就来介绍一下Linux系统中修改/etc/profile文件的方法:...
    2015-07-15 04.07.38
  • Linux系统如何修改文件的时间

    Linux系统如何修改文件的时间

    Linux系统文件创建的时间并不是不能修改的,通过touch命令可以修改文件的时间,从而达到以假乱真的效果。下面就来介绍一下Linux系统如何修改文件的时间...
    2015-11-05 03.11.11

发表评论

验证码: 看不清?点击更换

注:网友评论仅供其表达个人看法,并不代表本站立场。