Я использую Mac 10.7.5 и на оболочке Bash. Я пытаюсь найти экземпляры строки в группе файлов, но получаю эту ошибку
Daves-MacBook-Pro:folder davea$ find . -name "*" | xargs grep 'state-icons'
xargs: grep: Argument list too long
Как я могу запустить команду (или аналогичную), чтобы избежать этой ошибки?
grep '...' <( find … )
может быть?Ответы:
Вы можете использовать
-n
опциюxargs
ограничения количества аргументов.Обратите внимание, что это не работает для файлов с пробелами в их именах.
источник
grep
будет запущен несколько раз, по 20 файловых аргументов каждый. Вы можете добавить,-type f
чтобыfind
избежать ошибок приgrep
попытке открыть каталоги.find
отчеты, скажем, 61 файл, тоxargs
будут выполнятьсяgrep
четыре раза - три раза с 20 файлами и один раз с 1 файлом. Когдаgrep
запускается с несколькими файлами, он сообщает имена файлов, в которых он находит совпадения; не так только с одним аргументом имени файла. Уловка, которая обычно используется для исправления этогоxargs -n 20 grep 'state-icons' /dev/null
, так сказать ,xargs
будет запускатьсяgrep
три раза с 21 файлом и один раз с 2 файлами - конечно/dev/null
, это будет дополнительный файл , который в противном случае не будет влиять на запуск.-H
опциюgrep
(если поддерживается).Как насчет этого, если вы хотите искать через имя файла :
и это, если вы хотите просмотреть содержимое файла :
источник
grep
только с именами файлов , а не с их содержимым. Также*.*
не означает «все файлы» (как в Windows); он ограничивает поиск файлами, которые имеют.
в своем имени.-name
аргумент указывает, что они хотят искать имя файла. Если они хотят искать содержимое файла, просто опуститеecho
и используйтеgrep 'state-icons' $x