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
.
就这么简单:
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)
现在运行命令,替换pwd
为foo.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)