【发布时间】:2011-04-29 01:43:42
【问题描述】:
我在 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
谢谢
【问题讨论】:
-
我不明白你想要什么。为什么不希望
*扩展?如果不是,您认为 find 如何向您显示结果? -
因为我希望
find的 argv[3] 等于{'*','.','p','d','f'}。 Find 已经足够成熟,可以解读小丑了。 -
例子:我有
./a.pdf,./b/a.pdf,./b/b.pdf;我运行find . -iname "*.pdf"。 Cmd 将其扩展为find . -iname a.pdf,最终我的结果中没有得到./b/b.pdf。当然,使用 Unix shell,find . -iname '*.pdf'可以获取所有 pdf 文件。 -
在您的问题中显示您的批处理代码以更好地了解您的情况
-
我运行
find . -iname "*.pdf"并且没有问题。它会显示我所有的 pdf 文件...