Encontrar com ls : as primeiras coisas primeiro, ls | grep cisco é um pouco detalhado, pois cisco não é uma expressão regular. Experimente:
ls *cisco*
Usando find : seguindo as mesmas linhas, -regex é um exagero com um padrão simples e estático. Que tal:
find -name '*cisco*'
As aspas são necessárias para que o glob seja interpretado por find , não pelo shell. Além disso, -print é necessário para muitas versões de find , mas é opcional (e o predicado padrão) para outros (por exemplo, GNU find ). Sinta-se à vontade para adicioná-lo se precisar.
Se você precisar pesquisar "cisco" no nome completo do caminho, tente isso:
find -path '*cisco*'
que é equivalente a find | fgrep cisco .
Usando find com expressões regulares : vamos fazer isso de qualquer maneira, já que é isso que você quer. Copiando sem vergonha do GNU find manpage:
-regex pattern
File name matches regular expression pattern. This is a match on the whole path, not a search. For example, to match a file named './fubar3', you can use the regular expression '.*bar.' or '.*b.*3', but not 'f.*r3'.
O que isto significa é que a sua expressão regular é encapsulada em um ^...$ invisível, então deve corresponder a todos os caracteres no nome completo do caminho do arquivo. Então, como nwildner e otokan disseram nos comentários, você deveria usar algo como:
find -regex '.*cisco.*'
E você nem precisa do -regextype para algo tão simples.