Cygwin "find" não retorna nada

Cygwin "find" não retorna nada

Este comando não retorna nada no Cygwin em execução no Windows Server 2008 r2:

/usr/bin/encontrar/

Recebo uma pequena pausa, mas nenhum texto é retornado. Nenhum erro, nenhum resultado, etc. Tentei com diferentes caminhos de pesquisa, usando argumentos (como -type f) e configurei meu caminho cygwin para apenas /usr/local/bin:/usr/bin. Nada funciona.

Ideias?

Obrigado

Responder1

Esse é um comportamento muito estranho e nunca encontrei nada parecido ao usar o Cygwin. Não tenho pontos de reputação suficientes para solicitar informações usando comentários, então postarei apenas as técnicas de depuração que usaria. Esperançosamente, eles serão úteis para qualquer pessoa que tenha problemas semelhantes.

Primeiramente, tentaria verificar se estava executando o executável correto. A execução find --versiondeve retornar algo como o seguinte:

encontrar (GNU findutils) 4.5.11

Empacotado por Cygwin (4.5.11-1)

Se eu ainda não estivesse obtendo nenhuma saída, eu (instalaria e) usaria strace o comando do Cygwin:

mkdir testdir
strace -o find.out find testdir
rmdir testdir

stracepermite que você veja o que um executável Cygwin faz para a DLL Cygwin. Com o comando acima, a saída do comando find é armazenada em arquivo find.out.

A menos que você esteja familiarizado com a programação do sistema Windows, muito disso não fará sentido. No entanto, examinar a saída ainda lhe dará uma ideia do que o comando está fazendo, por exemplo, o Cygwin PATH e outras variáveis ​​de ambiente passadas para o comando são capturadas. Normalmente procuro open( ver quais arquivos o comando (find) está tentando usar. Chamadas bem-sucedidas para a função open serão exibidas como:

open: open(/home/anthony/t, 0x30C000)
open: open(., 0x400000)

Chamadas malsucedidas para abrir retornam um valor de -1. Observe que nem todos os arquivos que encontram tentativas de abertura são realmente necessários para que o comando funcione corretamente. Este é um exemplo de uma tentativa malsucedida (as informações locale.alias seriam lidas se existissem, mas não são necessárias para find fazer seu trabalho):

open: -1 = open(/usr/local/share/locale/locale.alias, 0x8000), errno 2

Nota: eu crio (e removo) o testdirdiretório vazio para que não haja uma quantidade enorme de informações capturadas no arquivo de saída strace.

informação relacionada