如何使用 Cygwin 版本的 find 而不是 Windows 版本

问题描述 投票:0回答:3

我已经在我的机器上安装了 Cygwin 并在我的 PATH 中设置了它的 bin 文件夹。

我可以在Windows命令提示符下使用所有Cygwin命令。

但是,我遇到的一个问题是,Cygwin 和 Windows 都有一个命令“

find
”。每当我使用
find
时,都会选择 Windows 版本。

我是否可以强制使用 Cygwin 版本的

find
而不是 Windows 版本?

windows cmd cygwin
3个回答
0
投票

确保 cmd 和 bash shell 的 PATH 变量中 cygwin 可执行文件文件夹

/usr/bin
位于 cmd 可执行文件文件夹
c:\Windows\system32
之前,以确保运行 cygwin 的 find 而不是 Windows 的 find 命令。

在 cygwin shell 中使用

which -a find
列出通过 bash shell 的 PATH 变量找到的可执行文件。

在 cmd shell 中使用

where $PATH:find
列出通过 cmd shell 的 PATH 变量找到的可执行文件。


0
投票

1。检查 find.exe 文件的路径,您将获得 Windows 和 Cygwin 的路径,其中 Windows 是第一个 :

C:\Users\User>where is find
C:\Windows\System32\find.exe
C:\cygwin64\bin\find.exe
INFO: Could not find "is".

2。现在您将看到默认操作系统是什么:

`which find
C:\Windows\System32\find.exe`

**3.**使用此命令在 Windows 之前从 Cygwin 设置查找:

set PATH=C:\cygwin64\bin;%PATH%

4。您现在将看到一长串路径,您的路径应该是第一个

C:\Users\User\L>echo %PATH%

5。现在您可以做一个简短的测试,通过简单的查找命令检查它是否有效,例如:

`find . -type f -name *.txt`

如果该操作返回所有以 txt 结尾的文件,或者不返回任何内容(因为当前位置没有任何以 txt 结尾的文件),那么您成功了!如果您再次遇到该错误,请检查步骤。


-1
投票

这是因为 find 是 cmd 中内置的 shell,因此它甚至不会尝试遍历可执行文件搜索路径。

一般来说,Windows 无法理解 Cygwin 符号链接,但正如 https://cygwin.com/cygwin-ug-net/using.html#pathnames-symlinks 所解释的那样,在现代 Windows 版本中可以创建本机 Windows 符号链接在 NTFS 文件系统上,只要链接不跨文件系统即可。

我会考虑将其包装在例如放置在 Cygwin

/usr/local/bin
中的批处理脚本中,其名称类似于
cygfind.bat
(或任何你想称呼的名称),通过
find
显式调用 Cygwin 的
C:\path\to\find.exe

包装器方法的优点是,如果您升级 Cygwin 并且

find
已更新,包装它的批处理脚本仍然可以透明地工作。

我自己从未尝试过,但根据这个答案,您还可以使用特殊的

@doskey
变量来覆盖cmd内置命令。

© www.soinside.com 2019 - 2024. All rights reserved.