Pergunta

Estou procurando arquivos de scripts shell instalados em meu sistema, mas encontrar não funciona:

$ find /usr -name *.sh

Mas eu sei que há muitos scripts por aí.Por exemplo:

$ ls /usr/local/lib/*.sh
/usr/local/lib/tclConfig.sh  
/usr/local/lib/tkConfig.sh

Por que não encontrar trabalhar?

Foi útil?

Solução

Tente citar o curinga:

$ find /usr -name \*.sh

ou:

$ find /usr -name '*.sh'

Se acontecer de você ter um arquivo que corresponda *.sh no diretório de trabalho atual, o curinga será expandido antes que find o veja.Se acontecer de você ter um arquivo chamado tkConfig.sh em seu diretório de trabalho, o encontrar comando seria expandido para:

$ find /usr -name tkConfig.sh

que encontraria apenas arquivos chamados tkConfig.sh.Se você tivesse mais de um arquivo correspondente *.sh, você receberia um erro de sintaxe de encontrar:

$ cd /usr/local/lib
$ find /usr -name *.sh
find: bad option tkConfig.sh
find: path-list predicate-list

Novamente, o motivo é que o curinga se expande para ambos os arquivos:

$ find /usr -name tclConfig.sh tkConfig.sh

Citar o curinga evita que ele seja expandido prematuramente.

Outra possibilidade é que /usr ou um de seus subdiretórios seja um link simbólico. encontrar normalmente não segue links, então você pode precisar do -seguir opção:

$ find /usr -follow -name '*.sh'

Outras dicas

Em alguns sistemas (Solaris, por exemplo), não há ação padrão, então você precisa adicionar o comando -print.

find /usr -name '*.foo' -print

Para encontrar arquivos em seus discos, enxuta para usar "Localizar", em vez disso, é instantâneo (procure um exemplo de índice construído diariamente), você seria:

locate '/usr*.sh'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top