el comando find en cygwin da formato de parámetro incorrecto

14

Estoy usando Cygwin en mi máquina Windows. Estoy tratando de hacer una búsqueda y está dando formato de parámetro incorrecto. ¿Porqué es eso?

$ 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
  • ¿Debo instalar algo mientras instalo cygwin o estoy haciendo algo mal?

fuente

Respuestas:

19

Tu PATHes malo. Tiene directorios del sistema de Windows antes que los directorios de Cygwin, o tal vez no tiene directorios de Cygwin. Este mensaje proviene del comando de Windows find(que informa su nombre como FINDen mayúscula es una pista).

Cuando inicia un shell Cygwin, generalmente necesita configurar el PATH. Le recomiendo que inicie un shell de inicio de sesión (si recuerdo correctamente, eso es lo que hacen las entradas predeterminadas del menú del sistema Cygwin). Su Cygwin PATHdebería tener /usr/local/bin, /usr/biny /bin(al menos) delante de cualquier directorio que no sea Cygwin.

Gilles 'SO- deja de ser malvado'
fuente
1
Sí, eso es probablemente todo. Este error se debe a que el hallazgo que utilizó es el comando de búsqueda de Windows, no el comando de Cygwin.
Yanick Girouard
O escriba en /usr/bin/findlugar defind
He tenido /usr/binen el camino, supongo que el shell utiliza el primero findencontrado en $ PATH, que es el sistema. Estaba a punto de eliminarlo (porque de todos modos no lo necesitaba) , pero supongo que algunos scripts de sistema aleatorios podrían esperar esto find. Por lo tanto, la fijación de este el camino correcto es escribir un alias alias find="/usr/bin/find"en ~/.bashrc (o lo que sea shell que esté utilizando) .
Hi-Angel el
1

¿Está instalado find? ¿Qué devuelve "cuál encontrar"? Recuerde que Windows tiene una línea de comando integrada para encontrar que Cygwin terminaría usando si su propio hallazgo es mia.

James McLeod
fuente
1

La respuesta de Gilles es correcta, ya que la versión de Windows del findcomando viene antes que la versión de cygwin, y por eso se llama.

Sin embargo, poner a Cygwin por delante significará que cualquier archivo por lotes que use el findcomando de Windows ahora llamará al findcomando cygwin , que puede no ser lo que desea.

La forma más simbiótica para que ambos trabajen, en mi opinión, es hacer lo siguiente:

  1. Localice el findcomando cygwin y cámbiele el nombre / cópielo lfind.exe(o cualquier otro nombre que no esté en la RUTA de Windows)
  2. En su ~/.bashrcarchivo agregue la líneaalias find=lfind

De esta manera, cuando ejecute finddesde el terminal cygwin, usará la versión cygwin, pero los archivos por lotes usarán la versión de Windows.

Nota: Aún necesitará el directorio bin de cygwin en su RUTA, pero ahora puede estar más atrás del directorio del sistema de Windows.

Mitch Kent
fuente
0

Cuando instala Cygwin, no instala todos los paquetes posibles a menos que se lo solicite. Para agregar un paquete deseado, eche un vistazo a la explicación aquí en Super Usuario.

O simplemente realice las siguientes acciones:

  1. Inicie la configuración, seleccione un espejo y acceda a la pantalla de paquetes
  2. Seleccione "Guardar" de la lista de botones de radio en la parte superior
  3. Seleccione el paquete deseado bajo el grupo relevante
  4. Seleccione "Continuar"
Eugene S
fuente
0

Aquí están las utilidades GNU como puertos nativos win32 . No necesitan cygwin para ejecutarse, y vienen con un shell (sh.exe), que incluye grep, sed, awk, find, less, cat, tac y mucho más.

El problema con la ruta de Windows persistirá, pero tal vez cambie el nombre de find a gfind(gnu-find) o to search, para que sea más fácilmente accesible y agregue el directorio coreutils a su RUTA.

usuario desconocido
fuente