15

Я использую следующую команду для подсчета строк текста в файлах JAVA:

find . -name '*.java' | xargs wc -l

Как изменить параметры команды find чтобы они соответствовали более чем одному расширению файла? Например, я хотел бы использовать вышеуказанную операцию для файлов CPP, C и H.

4 ответа4

15

Используйте опцию -o для ИЛИ. Например, это будет список файлов .cpp , .c и .h :

find . -name \*.cpp -o -name \*.c -o -name \*.h
2

Вам нужно будет использовать опцию -o. Например, инструкция ниже находит все файлы png, jpg и gif в папке.

find . \( -iname \*.png -o -iname \*.jpg -o -iname \*.gif \)

Я использую опцию -iname, чтобы совпадение не чувствительно к регистру.

1

Хотя все ответы более или менее одинаковы, я не считаю их читаемыми с несколькими именами и логическими операторами между ними.

Я думаю, что это может быть более элегантным решением:

$ find . -type f | grep -E "\.java$|\.cpp$|\.c$"

Давайте разберемся с этим

  • find . рекурсивно находит все файлы в текущем пути (при необходимости измените путь на другой)
  • -type f сужает поиск только по файлам (не слишком много прироста скорости, но все же ...)
  • | grep -E Я использовал это для получения распознавания grep или оператора (|) в Mac OS X, использующей grep FreeBSD, GNU grep в этом не нуждается (проверьте в вашем файле man).
  • Регулярное выражение "\.java$|\.cpp$|\.c$" включающее файлы, имена которых заканчиваются на .java , .cpp и .c (добавьте нужные)

Затем вы можете передать полученный список для дальнейшей обработки, например,

$ find . -type f | grep -E "\.java$|\.cpp$|\.c$" | xargs sed -i '' $'/s/\r$//'

В этом примере удаляется конец строки DRL /Windows CRLF для OS X /Linux LF (это также синтаксис OS X sed , проверьте специфику вашей версии).

1
$ find /path/ -name '*.cpp' -or -name '*.c' -or -name '*.h'

«-Или» говорит, что я ищу один или оба из двух подходов.

Недавно я написал краткое руководство по использованию find с логическими операторами здесь: http://jamesfishwick.com/2012/linux-find-and-boolean-operators

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .