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文件
输入以下代码
执行指令