Gnuwin32 find.exe expands wildcard before performing search
I haven't found anything better than just avoiding wildcard characters
find.exe . -iregex ".+\.pdf" -print
I suffered this problem this afternoon. Benoit's UnxUtils can work. I also find MinGW's find.exe can work,it is under my
"MinGW\msys\1.0\bin"
directory. And it is consistent with the manual.
gnuwin32 and UnxUtils:
find.exe . -name GameCli*
work, butfind.exe . -name 'GameCli*'
doesn't work.MinGW's
find.exe . -name 'GameCli*'
work.
I have found myself the solution to my problem.
- Gnuwin32's
find.exe
is not working on recent Windows Versions (Vista, Seven) because it expands wildcards matching only the contents of the current directory. - Similarly, an old version of find.exe from UnxUtils suffered the same bug.
- The latest
find.exe
from UnxUtils is working.
One workaround is to add a wildcard/expansion that the Windows shell does not expand, but GNU find does:
find.exe . -name *[.:]pdf -print
The Windows shell[*] does not interpret/expand square braces. In addition, colon is not a valid character in Windows filenames, so this pattern cannot match any Windows filename, and the Windows shell will always pass the pattern through to find.exe.
Find.exe will then find any files ending in .pdf
or :pdf
, but since no files can have a name ending in :pdf
under Windows, it will only find files ending in .pdf
.
[*] It's actually the C runtime that does/not perform these wildcard expansions. I don't understand the Win32 C runtime well enough to refine the distinction, so for now for the purpose of this workaround, I'm just saying 'shell'.