Я использую следующую команду для подсчета строк текста в файлах JAVA:
find . -name '*.java' | xargs wc -l
Как я могу изменить find
параметры команды, чтобы они соответствовали более чем одному расширению файла? Например, я хотел бы использовать вышеуказанную операцию для файлов CPP, C и H.
find
команде, так как именно здесь вы ищете соответствующие файлы.find -print0 | xargs -0
конструкцию или даже лучше и проще:find . -name '*.cpp' -o -name '*.c' -o -name '*.h' -exec wc -l {} +
. Это позволит избежать проблем с именами файлов (пробелы, новые строки и т. Д.) И (очень) хорошо настраивается.Ответы:
Используйте
-o
опцию для ИЛИ. Например, этот список будет.cpp
,.c
и.h
файлы:источник
*
не нужно экранировать, если отформатирован как код. Полностью пропустил это. :)Вам нужно будет использовать опцию -o. Например, инструкция ниже находит все файлы png, jpg и gif в папке.
Я использую опцию -iname, чтобы совпадение не чувствительно к регистру.
источник
«-Или» говорит, что я ищу один или оба из двух подходов.
Недавно я написал краткое руководство по использованию find с логическими операторами здесь: http://jamesfishwick.com/2012/linux-find-and-boolean-operators
источник
Хотя все ответы более или менее одинаковы, я не считаю их читаемыми с несколькими именами и булевыми операторами между ними.
Я думаю, что это может быть более элегантным решением:
Давайте разберемся с этим
find .
рекурсивно находит все файлы в текущем пути (при необходимости измените путь на другой)-type f
сужает поиск только по файлам (не слишком большой прирост скорости, но все же ...)| grep -E
Я использовал это, чтобы получить grep распознавать или (|
) оператор в Mac OS X, которая использует FreeBSD grep , GNU grep в этом не нуждается (проверьте в вашемman
файле)."\.java$|\.cpp$|\.c$"
регулярное выражение , которое включает в себя файлы, имена которых оканчиваются с.java
,.cpp
и.c
(добавить в них вам нужно)Затем вы можете передать полученный список для дальнейшей обработки, например,
В этом примере удаляется
CRLF
окончание строки DOS / Windows для OS X / LinuxLF
(это такжеsed
синтаксис OS X , проверьте специфику вашей версии).источник
использование
объяснение
find
рекурсия.-o
Означает-or
. Таким образом, выше означает поиск этого символа или этого. Если у вас есть только один шаблон, то нет необходимости-o
.источник