commande find dans cygwin donnant un format de paramètre incorrect

14

J'utilise cygwin dans ma machine Windows. J'essaie de faire une recherche et cela donne un format de paramètre incorrect. Pourquoi donc?

$ 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
  • Dois-je installer quelque chose lors de l'installation de cygwin ou est-ce que je fais quelque chose de mal?

la source

Réponses:

19

Tu PATHes mauvais. Il a des répertoires système Windows avant les répertoires Cygwin, ou n'a peut-être pas du tout de répertoires Cygwin. Ce message provient de la commande Windows find(qu'il indique son nom car FINDen majuscule est un indice).

Lorsque vous démarrez un shell Cygwin, vous devez généralement définir le PATH. Je vous recommande de démarrer un shell de connexion (si je me souviens bien, c'est ce que font les entrées de menu par défaut du système Cygwin). Votre Cygwin PATHdevrait avoir /usr/local/bin, /usr/binet /bin(au moins) devant tout répertoire non-Cygwin.

Gilles 'SO- arrête d'être méchant'
la source
1
Ouais, c'est probablement ça. Cette erreur est due au fait que la recherche que vous avez utilisée est la commande find de Windows, pas celle de cygwin.
Yanick Girouard
Ou tapez /usr/bin/findau lieu defind
J'ai eu /usr/bindans le chemin, je suppose que le shell utilise le premier findtrouvé dans le $ PATH, qui est le système. J'étais sur le point de le supprimer (car je n'en avais pas besoin de toute façon) , mais je suppose que certains scripts système aléatoires pourraient s'attendre à cela find. Ainsi, la fixation de ce la bonne manière est d'écrire un alias alias find="/usr/bin/find"dans ~/.bashrc (ou shell que vous utilisez) .
Hi-Angel
1

Find est-il installé? Que signifie "qui trouve"? N'oubliez pas que Windows possède une ligne de commande intégrée que Cygwin finirait par utiliser si sa propre recherche était mia.

James McLeod
la source
1

La réponse de Gilles est correcte dans la mesure où la version Windows de la findcommande précède la version cygwin, et donc elle est appelée.

Cependant, faire avancer Cygwin signifie que tous les fichiers batch qui utilisent la findcommande windows appellent désormais la findcommande cygwin , ce qui n'est peut-être pas ce que vous voulez.

La façon la plus symbiotique pour les deux de travailler, à mon avis, est de faire ce qui suit:

  1. Localisez la findcommande cygwin et renommez / copiez-la lfind.exe(ou tout autre nom qui n'est pas sur le chemin Windows)
  2. Dans votre ~/.bashrcfichier ajoutez la lignealias find=lfind

De cette façon, lorsque vous exécutez à findpartir du terminal cygwin, vous utiliserez la version cygwin, mais les fichiers batch utiliseront la version Windows.

Remarque: Vous aurez toujours besoin du répertoire cygwin bin sur votre PATH, mais il peut maintenant être plus éloigné du répertoire système de Windows.

Mitch Kent
la source
0

Lorsque vous installez Cygwin, il n'installe pas tous les packages possibles, sauf si vous le lui demandez. Afin d'ajouter un package souhaité, jetez un oeil à l'explication ici sur Super User.

Ou effectuez simplement les actions suivantes:

  1. Démarrez l'installation, sélectionnez un miroir et accédez à l'écran des packages
  2. Sélectionnez "Garder" dans la liste des boutons radio en haut
  3. Sélectionnez le package souhaité dans le groupe correspondant
  4. Sélectionnez "Continuer"
Eugene S
la source
0

Voici les GNU-utils en tant que ports natifs win32 . Ils n'ont pas besoin de cygwin pour être exécutés et sont livrés avec un shell (sh.exe), y compris grep, sed, awk, find, less, cat, tac et bien plus encore.

Le problème avec le chemin Windows persistera, mais peut-être renommez-vous la recherche en gfind(gnu-find) ou en search, pour la rendre plus facilement accessible, et ajoutez le répertoire coreutils à votre PATH.

Utilisateur inconnu
la source