Você pode adaptar qualquer uma das soluções, por exemplo,
-
use
( -execou-exec )com as soluções slm ou patrick (o segundoexecé executado somente se o primeiro retornarfalse,-printserá executado somente se um deles retornartrue):find . -type d \( ! -exec test -f '{}/stdout' \; -o ! -exec grep -q str1 '{}/stdout' \; \) -printou ainda mais curto, como sugerido por Costas :
find . -type d \! -exec grep -q 'str1' {}/stdout 2>/dev/null \; -print -
use uma condição com a solução terdon :
for d in **/ do if [[ ! -f "$d"stdout ]] then printf '%s\n' "$d" else grep -q str1 "$d"stdout || printf '%s\n' "$d" fi done -
ou, com
zsh:print -rl **/*(/e_'[[ ! -f $REPLY/stdout ]] || ! grep -q str1 $REPLY/stdout'_)