shell 递归遍历目录下的所有文件并统一改名的方法

所属分类: 脚本专栏 / linux shell 阅读数: 1672
收藏 0 赞 0 分享

遇到一道题目,如何把某个目录下的每个文件统一在名字前加上”abc”,用shell实现

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

如何实现遍历?我们写一个函数:

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

以上这篇shell 递归遍历目录下的所有文件并统一改名的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

linux sudo密码输入时显示星号的操作方法

在输入linux sudo密码的时候终端是不显示任何东西的,我们不知道我们按下的密码到底输入进去了没有,如果可以像在网站上登录账号密码的时候显示星号多好,下面小编给大家介绍下linux sudo密码输入时显示星号的操作方法
收藏 0 赞 0 分享

如何让history命令显示日期和时间

我们都对 history 命令很熟悉。它将终端上 bash 执行过的所有命令存储到 .bash_history 文件中,来帮助我们复查用户之前执行过的命令。这篇文章主要介绍了让history命令显示日期和时间的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

shell实现图书管理系统

这篇文章主要介绍了shell实现图书管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

shell实现学生成绩管理系统

这篇文章主要为大家详细介绍了shell实现学生成绩管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

shell编程实现学生成绩管理系统

这篇文章主要为大家详细介绍了shell编程实现学生成绩管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

利用Linux中的crontab实现分布式项目定时任务功能

crond是Linux用来定期执行程序的命令.这篇文章主要介绍了利用Linux中的crontab实现分布式项目定时任务,需要的朋友可以参考下
收藏 0 赞 0 分享

Linux之时钟中断详解

这篇文章主要介绍了Linux之时钟中断详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

linux系统上传下载命令rz和sz的教程

这篇文章主要介绍了linux系统上传下载命令rz和sz的安装测试方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Shell编程之特殊变量的笔记小结

这篇文章主要介绍了Shell编程之特殊变量的笔记小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解Shell编程之变量数值计算(一)

本篇文章主要介绍了详解Shell编程之变量数值计算,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多