使用bash

时间:2015-08-20 12:28:13

标签: bash file recursion

我目前有一个小脚本来处理目录中的所有文件。我希望这也递归处理子文件夹中的所有文件。有关如何做到这一点的任何想法? 我目前的代码是:

#!/bin/bash
for file in ./input/*
do
   do_something "$file"
done

2 个答案:

答案 0 :(得分:4)

您可以使用find

find input/ -type f -exec do_something {} \;

来自man页面:

  

find实用程序递归地下降列出的每个路径的目录树,根据树中的每个文件评估表达式(由下面列出的primariesoperands组成)。

为清楚起见,请参阅man页面中有关exec{}的更多详细信息:

  

-exec utility [argument ...];

     

如果名为utility的程序返回零值作为其退出状态,则为true。

     

可以将可选参数传递给该实用程序。表达必须   用分号(;)终止。如果从shell调用find   如果shell会另外处理,你可能需要引用分号   它作为控制操作员。如果字符串{}出现在任何位置   实用程序名称或参数由当前文件的路径名替换。将从执行查找的目录执行实用程序。实用程序和参数不受shell模式和结构的进一步扩展的影响。

希望这会有所帮助:)

答案 1 :(得分:3)

bash 4中,您可以使用**模式,该模式匹配路径中的0个或更多目录。

shopt -s globstar
for file in ./input/**/*
do
   do_something "$file"
done