如何使用if命令作为find的扩展名?

时间:2014-12-01 14:07:29

标签: shell find

我想在目录树中找到一些名称,当我找到特定目录时,我想检查它是否有一些默认子目录。问题是,我不知道如何做到这一点。我尝试使用这个命令:

find -iname $i -exec if [ -d $1/subdir ] then echo $1 fi

然后我得到这样的报告:

  

find:缺少`-exec'

的参数

那么,什么是正确的解决方案?

1 个答案:

答案 0 :(得分:2)

exec需要单个可执行文件,而不是任意shell命令。显式运行新的shell实例,并将shell命令作为参数传递给-c选项。使用{}作为sh的单个位置参数,以便找到找到的目录的名称 正确传递给shell命令。

find -iname "$i" -exec sh -c 'if [ -d "$1"/subdir ]; then echo "$1"; fi' '{}' \;

如果可能的话,重组逻辑可能会更简单一些:

find -wholename "$i/subdir" -type d -exec dirname '{}' \;

find查找实际的subdir目录而不是其父目录,然后输出包含 subdir的目录名