comando find no cygwin, dando formato de parâmetro incorreto

14

Estou usando o cygwin na minha máquina windows. Estou tentando fazer uma busca e está dando formato de parâmetro incorreto. Por que é que?

$ ls
bootstrap.jar
catalina-tasks.xml
catalina.bat
catalina.sh
commons-daemon-native.tar.gz
commons-daemon.jar
cpappend.bat
digest.bat
digest.sh
setclasspath.bat
setclasspath.sh
shutdown.bat
shutdown.sh
startup.bat
startup.sh
tomcat-juli.jar
tomcat-native.tar.gz
tool-wrapper.bat
tool-wrapper.sh
version.bat
version.sh

$ find . -name "version.sh"
FIND: Parameter format not correct
  • Devo instalar alguma coisa durante a instalação do cygwin ou estou fazendo algo errado?

fonte

Respostas:

19

Você PATHé ruim. Ele possui diretórios do sistema Windows antes dos diretórios Cygwin, ou talvez não tenha diretórios Cygwin. Essa mensagem é proveniente do comando do Windows find(que informa seu nome, como FINDem maiúsculas é uma dica).

Quando você inicia um shell Cygwin, geralmente precisa definir o PATH. Eu recomendo que você inicie um shell de login (se bem me lembro, é isso que as entradas padrão do menu do sistema Cygwin fazem). Seu Cygwin PATHdeve ter /usr/local/bin, /usr/bine /bin(pelo menos), à frente de qualquer diretório que não seja do Cygwin.

Gilles 'SO- parar de ser mau'
fonte
1
Sim, provavelmente é isso. Esse erro ocorre porque a localização que você usou é o comando find do Windows, não o da cygwin.
Yanick Girouard
Ou digite em /usr/bin/findvez defind
Eu tive /usr/binno caminho, acho que o shell usa o primeiro findencontrado no $ PATH, que é o sistema. Eu estava prestes a removê-lo (porque não precisava dele mesmo) , mas acho que alguns scripts aleatórios do sistema podem esperar exatamente isso find. Portanto, corrigir isso da maneira certa é escrever um alias alias find="/usr/bin/find"no ~/.bashrc (ou em qualquer shell que você esteja usando) .
Hi-Angel
1

O find está instalado? O que "qual encontrar" retorna? Lembre-se de que o Windows possui uma linha de comando interna que o Cygwin acabaria usando se sua própria localização fosse mia.

James McLeod
fonte
1

A resposta de Gilles está correta, pois a versão do Windows para o findcomando vem antes da versão do cygwin e, portanto, está sendo chamada.

Colocar o Cygwin à frente, no entanto, significa que qualquer arquivo em lotes que use o findcomando windows agora chamará o findcomando cygwin , que pode não ser o que você deseja.

A maneira mais simbiótica de ambos trabalharem, na minha opinião, é fazer o seguinte:

  1. Localize o findcomando cygwin e renomeie / copie-o para lfind.exe(ou qualquer outro nome que não esteja no PATH do Windows)
  2. No seu ~/.bashrcarquivo, adicione a linhaalias find=lfind

Dessa forma, quando você executar a findpartir do terminal cygwin, usará a versão cygwin, mas os arquivos em lote usarão a versão windows.

Nota: Você ainda precisará do diretório cygwin bin no seu PATH, mas agora ele pode estar mais distante do diretório do sistema Windows.

Mitch Kent
fonte
0

Quando você está instalando o Cygwin, ele não instala todos os pacotes possíveis, a menos que você solicite. Para adicionar um pacote desejado, dê uma olhada na explicação aqui no Superusuário.

Ou apenas execute as seguintes ações:

  1. Inicie a instalação, selecione um espelho e acesse a tela de pacotes
  2. Selecione "Manter" na lista de botões de opção na parte superior
  3. Selecione o pacote desejado no grupo relevante
  4. Selecione "Continuar"
Eugene S
fonte
0

Aqui estão os GNU-utils como portas win32 nativas . Eles não precisam que o cygwin seja executado e vêm com um shell (sh.exe), incluindo grep, sed, awk, find, less, cat, tac e muito mais.

O problema com o caminho do Windows persistirá, mas talvez você renomeie a localização para gfind(gnu-find) ou para search, para torná-la mais facilmente acessível, e adicione o diretório coreutils ao seu PATH.

Usuário desconhecido
fonte