Я использую двоичные файлы Gnuwin32 в среде Windows.
Когда я хочу найти файлы определенного типа, скажем, 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
Спасибо