我目前有一个小脚本来处理目录中的所有文件。我希望这也递归处理子文件夹中的所有文件。有关如何做到这一点的任何想法? 我目前的代码是:
#!/bin/bash
for file in ./input/*
do
do_something "$file"
done
答案 0 :(得分:4)
您可以使用find
:
find input/ -type f -exec do_something {} \;
来自man
页面:
find实用程序递归地下降列出的每个路径的目录树,根据树中的每个文件评估表达式(由下面列出的
primaries
和operands
组成)。
为清楚起见,请参阅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