在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 files

02do

03new=

04mv

05done

复制代码

find . -name "Lan*txt" -type f | read files

do

new=

mv

done

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 d

03[martin@TSPerPacketsTest]$ echo "a b c d" | awk '{va="varA";print va, }'

04varA a b c d

05[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_Lan\2/e'

复制代码

[martin@TSPerPacketsTest]$ ls *Lan* | sed -r -n 's/(.*)Lan(.*)/mv & \1ch_Lan\2/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 & \1\2ch7_Lan\3/e'

复制代码

[martin@TSPerPacketsTest]$ find . -name "*Lan*" -type f | sed -r -n 's/(.*)([^\/]*)Lan([^\/]*)$/mv & \1\2ch7_Lan\3/e'

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

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

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

linux下文件怎么改名字,Linux文件名字批量修改步骤 Linux修改文件名的方法相关推荐

  1. linux下使用libmad库实现mp3文件的解码、播放

    linux下使用libmad库实现mp3文件的解码.播放 目录(?)[+] 准备工作 解码流程 播放 遇到的问题 据说这个更新到2004年2月的libmad是一种高品质的MPEG音频解码器,支持24- ...

  2. linux下使用openssl和md5sum加密文件或者字符串

    linux下使用openssl和md5sum加密文件或者字符串 前言 1 用oppnssl md5 加密字符串和文件的方法 1.1 oppnssl md5 加密字符串的方法 a.手动输入命令及过程如下 ...

  3. Linux下利用rsync实现多服务器文件同步

    Linux下利用rsync实现多服务器文件同步 目标:多服务器文件同步 环境:2台centos5.6 Web端:192.168.20.20 Backup端:192.168.20.21 需要备份目录为: ...

  4. Linux 下的用户、用户组、文件权限设置

    给用户增加执行权限 chmod u+x a.txt 给用户所属组增加写权限,其他用户删除读权限 chmod g+w,o-r a.txt 给用户所属组增加读写执行权限 chmod g=rwx a.txt ...

  5. Linux下scp无密码上传 下载 文件 目录的方法

    这篇文章主要介绍了Linux下scp无密码上传 下载 文件 目录的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在Linux下远程备份的时候,需要配置scp的 无密码复制文件.目录.就把这个 ...

  6. 【java】 linux下利用nohup后台运行jar文件包程序

    Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...

  7. Linux 下从命令行打开pdf文件和html文件的命令

    Linux 下从命令行打开pdf文件和html文件的命令 [日期:2012-06-18] 来源:Linux社区 作者:hipercomer [字体:大 中 小] 如果你经常工作在Linux终端下,某个 ...

  8. linux中查找某一个字符串,linux下查找包含某个字符串的文件

    linux下查找包含某个字符串的文件 | Rootop 服务器运维与web架构 比如在当前路径下有个test文件夹,其中包含 a.b. c.d.c 四个文件,内容如下: [root@rhel6www ...

  9. Linux下将两个10G的文件打包成一个文件需要多久

    Linux下将两个10G的文件打包成一个文件需要多久 | 公云网博客 Linux下将两个10G的文件打包成一个文件需要多久 发表于 2012 年 9 月 19 日 由 refactor 微博上kevi ...

  10. Linux 下的0 1 2特殊文件描述符~

    最近在做项目的时候遇到的几个知识点,我觉得非常有意思,以前学Linux的时候也有接触到管道方面的,但是在应用中却基本没有遇到过. 还有Linux下的几个特殊的文件描述符,用这几个文件描述符可以做很多事 ...

最新文章

  1. PPT绘制示意图视频+文字版本-一篇就学会
  2. 开发板与linux文件系统,基于topeer 4412开发板 ***面linux文件系统的制作
  3. php 将数组导出excel,#php 怎样将 数组导出excel文件#前端导出excel表格
  4. 为什么说Lucene不好
  5. android4.3 截屏功能的尝试与失败分析
  6. 视觉激光融合——VLOAM / LIMO算法解析
  7. 计算机系统怎么算页面大小,电脑网页的设计尺寸是多少
  8. 【ArcGIS风暴】基于ArcGIS空间分析功能研究渭河流域镇驻地空间分布格局
  9. 如何找出光纤微米级别的脏污?女朋友的一个举动给了我灵感
  10. java 如何去掉http debug日志_谈谈日志的最佳实践
  11. android查看native日志,Android 日志管理框架 NativeLogger
  12. 【photoshop Action Manager】动作管理器- 获取预设管理器信息
  13. 【Multisim仿真】双向晶闸管功能演示
  14. CCA分析图如何解读_微生物群落与环境因子关联:全自动的CCA/RDA分析流程!!...
  15. 连接型CRM与社交型CRM、传统漏斗型CRM有什么区别?
  16. 调用阿里云的通用文字识别-高精版识别接口,识别图片中的文字详解
  17. 数值重映射方法(Remap)
  18. 仿真工具打开raw报cannot load library XXX.dll错误
  19. android水印控件,Android图片添加文字水印并保存水印文字图片到指定文件
  20. c罗图片带字经典语言,20条经典的唯美的图片带字-感人的情话

热门文章

  1. eslint报错no-octal-escape.js:41
  2. html自动刷新倒计时,javascript – 倒计时结束时刷新页面
  3. python中使用tomorrow多线程时报错invalid syntax
  4. Android 性能优化探究,不愧是Alibaba技术官
  5. 学习笔记 - Postgres如何创建有自增主键的表
  6. hi3559av100的启动和升级
  7. Serpent.AI - 游戏代理框架(Python)
  8. atca背板_高速背板及相关标准介绍
  9. 网易java开发实习日记
  10. web前端之城市级联