cygwin中的find命令给出的参数格式不正确


14

我在Windows机器中使用cygwin。我正在尝试查找,并且给出的参数格式不正确。这是为什么?

$ 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
  • 在安装cygwin时是否应该安装任何东西,或者我做错了什么?
find  cygwin 

Answers:


19

PATH不好 在Cygwin目录之前,它具有Windows系统目录,或者根本没有Cygwin目录。此消息来自Windows命令find(它FIND以大写形式报告其名称是一个提示)。

启动Cygwin Shell时,通常需要设置PATH。我建议您启动一个登录外壳程序(如果我没记错的话,那就是Cygwin系统默认菜单项的作用)。您的Cygwin PATH应该在所有非Cygwin目录的前面/usr/local/bin/usr/bin并且/bin(至少)之前。


1
是的,可能就是这样。该错误是因为您使用的查找是Windows的find命令,而不是cygwin的命令。
Yanick Girouard

或输入/usr/bin/find而不是find

我已经/usr/bin在路径中了,我猜想shell使用find在$ PATH中找到的第一个,它是系统。我正要删除它(因为无论如何我都不需要它),但是我猜想某些随机系统脚本可能会期望这个find。因此,解决此问题的正确方法是将别名alias find="/usr/bin/find"写入~/.bashrc (或您正在使用的任何shell)中
Hi-Angel

1

找到安装了吗?“哪个发现”返回什么?请记住,Windows有一个内置的命令行查找功能,如果Cygwin自己的查找为mia,Cygwin最终会使用它。


1

Gilles的回答是正确的,因为该find命令的Windows版本在cygwin版本之前,因此被调用。

但是,将Cygwin放在前面将意味着使用Windows find命令的所有批处理文件现在实际上都会调用cygwin find命令,而这可能并不是您想要的。

我认为,两种方法最共生的方式是执行以下操作:

  1. 找到cygwin find命令并将其重命名/复制到 lfind.exe(或Windows PATH上没有的任何其他名称)
  2. ~/.bashrc文件中添加以下行alias find=lfind

这样,当您find从cygwin终端运行时,将使用cygwin版本,但批处理文件将使用Windows版本。

注意:PATH上仍然需要cygwin bin目录,但是现在可以将其从Windows系统目录中移回来。


0

在安装Cygwin时,除非您要求,否则不会安装所有可能的软件包。为了添加所需的软件包,请查看超级用户此处的说明 。

或者只是执行以下操作:

  1. 启动安装程序,选择一个镜像,然后进入软件包屏幕
  2. 从顶部的单选按钮列表中选择“保留”
  3. 在相关组下选择所需的软件包
  4. 选择“继续”

0

这是GNU-utils作为本机win32端口。他们不需要运行cygwin,并附带一个shell(sh.exe),包括grep,sed,awk,find,less,cat,tac等。

Windows路径的问题将继续存在,但是也许您将查找重命名为gfind(gnu-find)或search,以使其更易于访问,然后将coreutils目录添加到PATH中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.