对Linux开发技术感兴趣或者是从事Linux开发技术的小伙伴是否知道如何把某个目录下的每个文件统一在名字前加上”abc”,用shell实现呢?下面就随Linux培训小编来了解一下吧。

扣丁学堂Linux培训

首先分析,一个目录下除了文件,还可能存在目录,这里可以看出需要有递归操作,如果是文件直接改名,目录则进入然后进行遍历。

如何实现遍历?我们写一个函数:function travFolder(){

#echo "travFolder"

flist=`ls $1`

cd $1

#echo $flist

for f in $flist

do

if test -d $f

then

#echo "dir:$f"

travFolder $f

else

#echo "file:$f"

changeName $f

fi

done

cd ../

}

每次对新的目录调用travFolder方法,首先用ls命令获得新目录下的文件名,接下来这一步很重要,cd这个新的目录,因为我们只是调用了 这个函数,其实还停留在上一层目录。注意,ls和cd的动作不能弄反。

接下来是怎么对文件进行改名,关键就是sed命令:function changeName(){

new=`echo $1|sed 's/^/abc/g'`

#new=`echo $1|sed -r 's/abc(.*$)/\1/g'`

#echo $new

mv $1 $new

}

sed命令支持正则表达式,我们将文件名作为sed命令的输入处理,'s/^/abc/g'是替换命令,s是替换处理,格式为s/old/new/g,^表示匹配字符串的开始,这个命令的效果就是在字符串开头插入abc

下一面一句注释的代码:new=`echo $1|sed -r 's/abc(.*$)/\1/g'`

表示把文件名用abc后面的字符替代,这里注意要使用命令-r,表示支持正则表达式的扩展,否则解释器是识别不了\1为分组这个意思的。

完整代码如下:#!/bin/bash

function changeName(){

#new=`echo $1|sed 's/^/abc/g'`

new=`echo $1|sed -r 's/abc(.*$)/\1/g'`

#echo $new

mv $1 $new

}

function travFolder(){

echo "travFolder"

flist=`ls $1`

cd $1

#echo $flist

for f in $flist

do

if test -d $f

then

#echo "dir:$f"

travFolder $f

else

#echo "file:$f"

changeName $f

fi

done

cd ../

}

dir=./TestDir

travFolder $dir

以上就是扣丁学堂Linux在线学习小编给大家分享的shell递归遍历目录下的所有文件并统一改名的方法,希望对小伙伴们有所帮助,想要了解更多内容的小伙伴可以登录扣丁学堂官网咨询。

想要学好Linux开发小编给大家推荐口碑良好的扣丁学堂,扣丁学堂有专业老师制定的Linux学习路线图辅助学员学习,此外还有与时俱进的Linux课程体系和Linux视频教程供大家学习,想要学好Linux开发技术的小伙伴快快行动吧。

Pyhon基础课程:https://ke.qq.com/course/327534?flowToken=1008607 【扫码进入Python全栈开发免费公开课】

H5基础课程:https://ke.qq.com/course/320523?flowToken=1008606【扫码进入HTML5前端开发VIP免费公开课】

注:点击(了解更多)进入课程直播间

linux sed 目录递归,shell递归遍历目录下的所有文件并统一改名的方法-文件更名...相关推荐

  1. Linux(shell)遍历目录删除指定文件,解决文件夹名称带空格问题

    最近打算把一些学习资源解压上传到阿里网盘上,可是在解压的时候出现了问题,无故产生很多隐藏文件(猪哥mac电脑,用的keka解压软件). 且文件夹层级很多,不可能实现手动一个一个文件夹删除,所以就考虑写 ...

  2. shell中遍历目录

    比如在/tmp中有1,2,3,4,5个文件夹 [root@test tmp]# mkdir {1..5} [root@test tmp]# ls 1  2  3  4  5  test  yum.lo ...

  3. shell脚本遍历目录下的所有文件并进行操作

    #!/bin/bashfunction read_dir(){ for file in `ls $1` #注意此处这是两个反引号,表示运行系统命令doif [ -d $1"/"$f ...

  4. linux得到低权shell,oracle低权限下获取shell

    转载请标明:http://hi.baidu.com/hack_forensic   <关于oracle列目录的可行性测试> 经过本人测试,确实可行,解决了 kj021320文章的遗憾,kj ...

  5. word 目录里面添加分节符下一页出现空白页的解决方法

    解决方法: 不要"插入下一页分节符"! 在目录后一页的页首,插入分隔符--连续,打开"页眉和页脚工具条",光标置于页脚,点页眉页脚工具条上的"链接到前 ...

  6. linux获取指定字符,shell 获取用户输入指定范围的单个字符的两种方法

    需求:要求获取用户输一个字符a-zA-Z: 方法一: 复制代码 代码如下: echo `echo {a..z}``echo {A..Z}` > /tmp/letterfile while rea ...

  7. linux运行java程序引用jar包,ubuntu下java 命令行引用jar包的方法

    推荐文章 Ubuntu常用快捷键总结 桌面常用快捷键 Alt + F1:聚焦到桌面左侧任务导航栏,可按上下键进行导航 Alt + F2:运行命令 Alt + F4:关闭当前窗口 Alt + Tab:切 ...

  8. linux firefox 10.0.12字体模糊,centos下字体模糊,firefox字体模糊解决方法

    scim输入法是我们经常使用的一种输入法,而firefox字体也是同样如此,而在CentOS系统中如何scim输入法设置和firefox字体修改呢?下面我们就来解决这2个问题. CentOS系统sci ...

  9. Linux常见指令与shell理解

    Linux常用指令与shell理解 文章目录 Linux常用指令与shell理解 1. ls指令 2. cd指令 3. pwd命令 4. touch指令 5. mkdir指令 6. rmdir和rm指 ...

最新文章

  1. linux locale文件,Linux 怎样修改locale语言设置
  2. Python模拟赌博实验,赌博为什么能赌到倾家荡产?
  3. 工作笔记--关于服务出问题时如何处理的流程
  4. 希望博客园可以开个邮件列表
  5. 用完HttpWebResponse时别忘了调用Close方法
  6. STM32F429i-DISCO FreeRTOS keil STM32CubeMX
  7. Sphinx制作htmlhelp手册文档(Manual-chm)
  8. Node.js中zlib模块的压缩/解压详解
  9. 针对特定人员和部门树形数据,重新拆分构造新的树形数据思路。
  10. 计算机学报英语,修改稿要求-计算机学报.PDF
  11. 基于哈里斯鹰算法优化概率神经网络PNN的分类预测-附代码
  12. 复杂sql语句:按部门统计人数
  13. Python快速编程入门#学习笔记06# |第6章 :函数(学生管理系统)
  14. 千万级数据查询中CK、ES、RediSearch方案的优化
  15. 蛟龙未遇,潜身于鱼虾之间;君子失时,拱手于小人之下。
  16. mysql中 where in
  17. FileReader -- 图片预览问题
  18. 各大公司面试题(社招)
  19. SpringBoot如何上传大文件
  20. JavaSE:网络编程

热门文章

  1. 【量化学堂】股票代码分类
  2. 关闭outlook express系统提示压缩邮件导致邮件丢失
  3. Utorrent 设置
  4. 关于三大主流移动操作系统的看法
  5. 什么是RRU和BBU
  6. 全新Redis6全部知识点,零基础入门
  7. 苹果x屏幕出现一条绿线_iPhone X 屏幕维修怎么防止被坑?各种屏幕的介绍
  8. GlusterFS 和 Ceph 比比看
  9. 使用shui文件夹遇到问题总结
  10. 《C++ 黑客编程揭秘与防范(第2版)》—第6章6.2节详解PE文件结构