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

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

我在我的 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 时安装任何东西还是我做错了什么?

答案1

你的PATH情况很糟糕。它在 Cygwin 目录之前有 Windows 系统目录,或者可能根本没有 Cygwin 目录。此消息来自 Windows 命令find(它以FIND大写形式报告其名称是一个提示)。

当您启动 Cygwin shell 时,通常需要设置PATH.我建议您启动一个登录 shell(如果我没记错的话,这就是默认的 Cygwin 系统菜单项的作用)。您的 CygwinPATH应该在任何非 Cygwin 目录之前有/usr/local/bin,/usr/bin/bin(至少)。

答案2

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

答案3

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

然而,将 Cygwin 放在前面意味着任何使用 windowsfind命令的批处理文件现在实际上都会调用 cygwinfind命令,这可能不是您想要的。

在我看来,两者最共生的方式是执行以下操作:

  1. 找到 cygwinfind命令并将其重命名/复制到 lfind.exe(或不在 Windows 路径上的任何其他名称)
  2. 在您的~/.bashrc文件中添加行alias find=lfind

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

注意:您仍然需要 PATH 上的 cygwin bin 目录,但它现在可以位于 Windows 系统目录的更后面。

答案4

以下是作为本机 win32 端口的 GNU-utils。它们不需要 cygwin 来运行,并带有 shell (sh.exe),包括 grep、sed、awk、find、less、cat、tac 等等。

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

相关内容