Você pode adaptar qualquer uma das soluções, por exemplo,
-
use
( -exec
ou-exec )
com as soluções slm ou patrick (o segundoexec
é executado somente se o primeiro retornarfalse
,-print
será executado somente se um deles retornartrue
):find . -type d \( ! -exec test -f '{}/stdout' \; -o ! -exec grep -q str1 '{}/stdout' \; \) -print
ou 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'_)