我在我的 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
命令,这可能不是您想要的。
在我看来,两者最共生的方式是执行以下操作:
- 找到 cygwin
find
命令并将其重命名/复制到lfind.exe
(或不在 Windows 路径上的任何其他名称) - 在您的
~/.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 中。