浏览每个子文件夹,检查文件夹并运行脚本

snu*_*den 5 bash directory shell-script

我有一个目录,其中包含各种深度的子文件夹。我想查看所有这些,检查它们是否包含具有特定名称的文件夹,如果该目录存在,则运行脚本(让我们调用此脚本foo.sh以避免混淆)。

foo.sh如果找到目标文件夹,则应在当前文件夹中运行。例子:

/A
  /subA-1
  /subA-2
    /target
  /subA-3
    /sub-subA-3
       /target
Run Code Online (Sandbox Code Playgroud)

我正在寻找的命令/脚本应从 运行/A,然后将遍历所有子文件夹以查找名称为 的文件夹target。进入后/subA-2满足此条件,然后在 foo.sh 中运行/subA-2。相同/sub-subA-3,但不是/subA-3

foo.sh不需要任何输入,它只需要在包含/target.

per*_*ion 7

就这么简单:

find A -type d -name target -execdir foo.sh \;
Run Code Online (Sandbox Code Playgroud)

从手册页:

-execdir 命令;

与 -exec 类似,但指定的命令是从包含匹配文件的子目录中运行的。

例子:

从问题创建并打印目录结构:

/tmp$ mkdir A; cd A
/tmp/A$ mkdir -p subA-1 subA-2/target subA-3/sub-subA-3/target
/tmp/A$ find .
.
./subA-2
./subA-2/target
./subA-3
./subA-3/sub-subA-3
./subA-3/sub-subA-3/target
./subA-1
Run Code Online (Sandbox Code Playgroud)

现在运行命令,替换pwdfoo.sh显示发生了什么:

/tmp/A$ find . -type d -name target -execdir pwd \;
/tmp/A/subA-2
/tmp/A/subA-3/sub-subA-3
Run Code Online (Sandbox Code Playgroud)