Вы хотите использовать что-то, что является относительно главным к размеру Вашего набора. Тот путь, когда Вы циклично выполняетесь вокруг, Вы не закончите на тех же числах, которые Вы просто попробовали.
Как сказал Энди Уайт, вы должны использовать fgrep
, чтобы соответствовать обычному .
или избежать точек.
Итак, вы необходимо написать ( -тип f
должен иметь только файлы: вам явно не нужны каталоги.):
find . -type f | xargs fgrep '...'
или если вы все еще хотите использовать grep:
find . -type f | xargs grep '\.\.\.'
И если вы только требуется текущий каталог , а не его подкаталоги:
find . -maxdepth 1 -type f | xargs fgrep '...'
@OP, если вы ищете файлы, содержащие ...,
grep -R "\.\.\." *
Если вы набираете буквально grep '...'
, вы найдете практически любую строку. Я сомневаюсь, что вы действительно набираете '...'
для своей команды grep, но если да, то ...
будет соответствовать любым трем символам.
Пожалуйста, опубликуйте дополнительную информацию о том, что вы ищете, и, возможно, кто-нибудь сможет вам больше помочь.
'.'. соответствует любому символу, поэтому вы найдете все строки, содержащие 3 или более символа.
Вы можете либо экранировать точки, например так:
find . | xargs grep '\.\.\.'
Или вы можете использовать fgrep, который выполняет буквальное сопоставление вместо регулярного выражения match:
find . | xargs fgrep '...'
(Некоторые версии grep также принимают флаг -F, который заставляет их вести себя как fgrep.)
Если вы ищете подходящее имя файла , попробуйте:
find . -name "filename pattern"
или
find . | grep "filename pattern"
Если вы ищете файлов , match (т.е. содержит строку grep)
find . | xargs grep "string pattern"
работает нормально. или просто:
grep "string pattern" -R *
Чтобы завершить ответ Джереми, вы можете также хочу попробовать
find . -type f | xargs grep 'your_pattern'
или
find . -type f -exec grep 'your_pattern' {} +
Что похоже на xargs
Я мог бы добавить: RTFM! Или более вежливо: использование и злоупотребление
man command
!