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.