使用 bash 递归处理文件

use*_*925 0 bash recursion file

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

#!/bin/bash
for file in ./input/*
do
   do_something "$file"
done
Run Code Online (Sandbox Code Playgroud)

Dar*_*ght 5

您可以使用find

find input/ -type f -exec do_something {} \;
Run Code Online (Sandbox Code Playgroud)

man页面:

find 实用程序针对列出的每个路径递归地降低目录树,根据树中的每个文件计算表达式(由下面列出的primaries和组成operands)。

为了清楚起见,这里有一些man关于exec和的页面的更多细节{}

-exec 实用程序 [参数 ...] ;

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

可选参数可以传递给实用程序。表达式必须以分号 ( ;)结尾。如果从 shell 调用 find ,如果 shell 将分号视为控制运算符,则可能需要引用分号。如果该字符串{}出现在实用程序名称或参数中的任何位置,则它将被当前文件的路径名替换。实用程序将从执行 find 的目录中执行。实用程序和参数不受 shell 模式和构造的进一步扩展的影响。

希望这可以帮助 :)