Bash 递归遍历文件夹以执行if语句

Bash 递归遍历文件夹以执行if语句,bash,shell,sh,Bash,Shell,Sh,我试图创建一个shell脚本,它递归遍历目录中的文件夹,检查文件是否存在,如果确实存在,则执行第二个脚本 我已经能够递归遍历文件夹并记录当前目录,但是在这个命令中包含if语句似乎破坏了这个过程,因为我认为我误解了语法 以下工作: find . -maxdepth 3 -type d \( ! -name . \) -exec bash -c "cd '{}' && pwd" \; 然而,这样做会在第3行给我一个语法错误,但我不知道为什么 find . -maxdepth 3 -

我试图创建一个shell脚本,它递归遍历目录中的文件夹,检查文件是否存在,如果确实存在,则执行第二个脚本

我已经能够递归遍历文件夹并记录当前目录,但是在这个命令中包含if语句似乎破坏了这个过程,因为我认为我误解了语法

以下工作:

find . -maxdepth 3 -type d \( ! -name . \) -exec bash -c "cd '{}' && pwd" \;
然而,这样做会在第3行给我一个语法错误,但我不知道为什么

find . -maxdepth 3 -type d \( ! -name . \) -exec bash -c "cd '{}' && 
if [\(-f "$FILE"\)]; then
sh script.sh" \;

如果有人能提供任何关于第3行语法错误的帮助,我们将不胜感激

if需要一个
fi
,引号必须转义(使用
\“
)。当我们在这里时,第二个
\(
\)
就不需要了。 您可以尝试:

find . -maxdepth 3 -type d \( ! -name . \) -exec bash -c "cd '{}' && if [ -f \"$FILE\" ]; then sh script.sh; fi" \;

如果它抱怨找不到
script.sh
,则可以使用
script.sh
的完整路径(而不仅仅是
script.sh
)。

不转义就不能嵌套双引号。这太好了!顺便说一句,StackOverflow中的标准过程是点击✓ 答案是肯定的。