Parece que você quer evitar procurar arquivos em *cache* diretórios mais do que encontrar arquivos com *pillar* e não *cache* em seus nomes. Então, apenas diga find para não se incomodar em descer em *cache* diretórios:
find . -iname '*cache*' -prune -o -iname '*pillar*' -print
Ou com zsh -o extendedglob :
ls -ld -- (#i)(^*cache*/)#*pillar*
(não estritamente equivalente, pois isso informaria um arquivo foo/pillar-cache )
Ou (menos eficiente à medida que desce a árvore inteira como na @solução do apaul ):
ls -ld -- (#i)**/*pillar*~*cache*
Detalhes sobre os globs específicos de zsh :
-
(#i): ative a correspondência insensível a maiúsculas e minúsculas -
^: operador glob de negação -
(...): agrupamento (como@(...)emksh). -
<something>#: zero ou mais de<something>(como*em regexps). -
~: e não operador (corresponde ao caminho completo) -
**/: 0 ou mais níveis de diretório (abreviação de(*/)#).
Adicione o qualificador (D) glob se você quiser descer em diretórios ocultos e corresponder arquivos ocultos, como na find solution.