com find :
find . ! -name . -prune \
\( -name '*.ext1' -o -name '*.ext2' \) \
! \( -name 'name1.*' -o -name 'name2.*' \)
Usar -prune é o equivalente padrão do -maxdepth do GNU ou de -depth <n> do BSD (embora esses BSDs também suportem -mindepth / -maxdepth à GNU). Aqui, ele diz find para não descer em nenhum diretório, exceto . .
o ! -name . também exclui . da seleção, então ! -name . -prune é o equivalente padrão do -mindepth 1 -maxdepth 1 do GNU ou de alguns% BSDs -depth 1 . Para o -mindepth 1 do GNU (alguns BSDs ' -depth -2 ), você escreveria find . \( -name . -o -prune \) .
Com zsh , você também pode:
setopt extendedglob
printf '%s\n' *.(ext1|ext2)~(name1|name2).*(D)
~ sendo o operador não-e e (D) para incluir arquivos-ponto.