Я с трудом получая находку для поиска совпадений в текущем каталоге, а также его подкаталогов.
Когда я запускаю find *test.c
это только дает мне совпадения в текущем каталоге. (не смотрит в подкаталоги)
Если я попытаюсь, find . -name *test.c
я ожидаю те же результаты, но вместо этого он дает мне только совпадения, которые находятся в подкаталоге. Когда есть файлы, которые должны соответствовать в рабочем каталоге, это дает мне:find: paths must precede expression: mytest.c
Что означает эта ошибка, и как я могу получить совпадения как из текущего каталога, так и из его подкаталогов?
find
из msysgit может бросить эту ошибку , если вы не окружать шаблон в кавычки:find . -name "*test.c"
. (В случае, если вы предпочитаете, чтобы он отличалсяfind.exe
от Windows и отличался от cmd)Ответы:
Попробуйте поместить его в кавычки - вы работаете с расширением подстановочного знака оболочки, поэтому то, что вы фактически передаете, чтобы найти, будет выглядеть так:
... вызывая синтаксическую ошибку. Так что попробуйте это вместо:
Обратите внимание на одинарные кавычки вокруг выражения вашего файла - они остановят оболочку (bash), расширяющую символы подстановки.
источник
echo *test.c
... результатом будет не эхо, расширяющее шаблон, а сама оболочка. Простой урок: если вы используете подстановочные знаки, процитируйте спецификацию файла :-)find . -type f -printf ‘%TY-%Tm-%Td %TT %p\n’
как нашел в Интернете, и встретил «пути должны предшествовать выражению». Проблема заключалась в том, что кавычки были слишком «умными». Я снова набрал команду, заставив заменить кавычки, и она запустилась.find
- если вы используете подстановочный знак,*.$variable
вам нужны двойные кавычки.Происходит то, что оболочка расширяет "* test.c" в список файлов. Попробуйте экранировать звездочку как:
источник
find . -name '*txt'
Попробуйте поместить это в кавычки:
источник
Из найти руководство:
источник
Я столкнулся с этим вопросом, когда пытался найти несколько имен файлов, которые я не мог объединить в регулярное выражение, как описано в ответе @Chris J, вот что сработало для меня
-o
или-or
логическое ИЛИ. См. Поиск файлов на Gnu.org для получения дополнительной информации.Я запускал это на CygWin.
источник
В моем случае мне не хватало трейлинга
/
в пути.источник
/
не требуется.