gpt4 book ai didi

find - Gnuwin32 find.exe在执行搜索之前会扩展通配符

转载 作者:行者123 更新时间:2023-12-03 13:45:47 26 4
gpt4 key购买 nike

我在Windows环境中使用Gnuwin32二进制文件。
当我想查找某种类型的文件时(例如PDF),我通常运行:

find . -iname '*.pdf' -print


这在任何UNIX系统上均可完美运行。

find.exe . -iname "*.pdf" -print


但是在Windows下,用双引号替换了单引号,它仅在当前目录中没有pdf文件时才起作用,否则 *会被扩展。

更糟糕:当当前目录中只有一个PDF文件时,它将展开,不会出现语法错误,并且您将得到错误的结果。

我尝试用尖号,反斜杠,星星本身转义 *,并用双引号引起来:对我而言,没有任何效果。

真实的例子:

好的,这是我的所有文件:

C:\tmp>find . -type f
./a/1.pdf
./a/2.pdf
./a/aa/1.pdf
./b/1.pdf
./b/bb/1.pdf
./b/bb/2.pdf


良好的行为,通配符未扩展

C:\tmp>find . -iname "*.pdf"
./a/1.pdf
./a/2.pdf
./a/aa/1.pdf
./b/1.pdf
./b/bb/1.pdf
./b/bb/2.pdf

C:\tmp>cd a


警告,行为不一致,通配符已扩展:

C:\tmp\a>find . -iname "*.pdf"
find: paths must precede expression
Usage: find [-H] [-L] [-P] [path...] [expression]

C:tmp\a>cd ..\b


警告,行为不一致,通配符已扩展:

C:\tmp\b>find . -iname "*.pdf"
./1.pdf
./bb/1.pdf


谢谢

最佳答案

一种解决方法是添加通配符/扩展名,使Windows Shell无法扩展,但GNU find可以:

find.exe . -name *[.:]pdf -print


Windows Shell [*]不解释/扩展方括号。此外,冒号不是Windows文件名中的有效字符,因此此模式不能与任何Windows文件名匹配,并且Windows Shell始终将模式传递给find.exe。

然后,Find.exe将查找任何以 .pdf:pdf结尾的文件,但是由于在Windows下没有文件的名称可以以 :pdf结尾,因此它将仅查找以 .pdf结尾的文件。

[*]实际上是C运行时不执行/不执行这些通配符扩展。我对Win32 C运行时不够了解,无法进一步完善区别,因此就此变通办法而言,我现在只是说“ shell”。

关于find - Gnuwin32 find.exe在执行搜索之前会扩展通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3995493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com