如何使用Shell遍历目录及其子目录中的所有文件?

ataman


看题目应该是Linux下的shell吧,我就以Linux为例来解答此题目了。使用Shell遍历目录及其子目录中的所有文件,老规矩,先问题分解:

  • 获取某目录及该目录中的子目录的所有文件列表

  • 循环对获取的文件列表进行处理


隆重介绍一下find命令,获取文件列表

find本来是用来递归查找文件的,当我们把关键字参数去掉之后,就可以实现遍历的功能。当设置递归的深度为2时,就可以满足我们解答本题的需求。为了演示,我先设置了一个目录man,下面有一些文件和目录:

我们来执行下面的命令,获取目录man和它下面的文件,以及子目录下的文件:

  • find man -maxdepth 2

这句命令的含义是在man目录下进行深度为2的遍历查找文件,因为没有设置查找条件,所以每遇到一个文件都满足查找条件,文件名就会被打印出来:


写出循环,实现完整的功能

使用for循环,遍历find语句提供的列表:

也可以写成一行在终端直接运行:

  • for i in $(find man -maxdepth 2); do echo $i; done


大功告成!

补充一点,如果不需要遍历到man和ager这两个目录的话,在find语句中加一个参数-type f,就只剩下文件了。

  • for i in $(find man -maxdepth 2 -type f); do echo $i; done


总结一下,Linux下使用终端操作时,遇到这种需求一定要先进行问题分解,不要忙于找现成的命令,根本还是要熟悉find的运用,可以事半功倍。得到文件列表之后,再进行遍历的操作。


如果我的回答对你有点价值,请莫忘点赞加关注,谢谢!欢迎在评论区发表各种意见!

本文为作者原创,严禁转载,违者必究。

产品经理老胡


新建一个shell文件

输入以下代码

执行指令


分享到:


相關文章: