Пример.
Есть некий проект и я хочу найти все файлы с исходниками, то есть *.c и *.h.
Я могу задать find . -name "*.[ch]"
А если у меня файлы *.cpp? Можно ли как-то их найти вместе с файлами *.h ?
Можно, конечно, сделать find . | grep -e \\.h$ -e \\.cpp$, но, может быть, можно обойтись только find?
Можно ли с помощью find искать файлы нескольких типов?
Модератор: Bizdelnick
-
MiK13
- Сообщения: 1288
- ОС: Linux Debian
-
ormorph
- Сообщения: 3133
- ОС: Gentoo
Re: Можно ли с помощью find искать файлы нескольких типов?
MiK13 писал: ↑09.01.2026 10:48Пример.
Есть некий проект и я хочу найти все файлы с исходниками, то есть *.c и *.h.
Я могу задать find . -name "*.[ch]"
А если у меня файлы *.cpp? Можно ли как-то их найти вместе с файлами *.h ?
Можно, конечно, сделать find . | grep -e \\.h$ -e \\.cpp$, но, может быть, можно обойтись только find?
Shell
$ man findSpoiler
Код: Выделить всё
( expr )
Поскольку круглые скобки специально используются в командной строке, то они должны быть заключены в кавычки. Во многих примерах на этой странице руководства для этой же цели
также, вместо "(...)", используется обратная косая черта: "\(...\)".
! expr Истинно (True), если expr ложно (false). Этот символ ("!") также обычно нуждается в защите от интерпретации командной оболочкой.
-not expr
То же, что и ! expr, но не совместимо с POSIX.
expr1 expr2
Два выражения подряд объединяются подразумеваемым оператором -a (логическое И); значение expr2 не вычисляется, если значение expr1 "ложно" (false).
expr1 -a expr2
То же, что и expr1 expr2.
expr1 -and expr2
То же, что и expr1 expr2, но не совместимо с POSIX.
expr1 -o expr2
Логическое ИЛИ; expr2 не вычисляется, если expr1 имеет значение "истинно" (true).
expr1 -or expr2
То же, что и expr1 -o expr2, но не совместимо с POSIX.
expr1 , expr2
Список; всегда вычисляется как expr1 и expr2. Значение expr1 отбрасывается; значением списка является значение expr2. Оператор запятая может использоваться для поиска
нескольких различных типов объектов, но только один раз при перемещении по иерархии файловой системы. Действие -fprintf можно использовать для составления списка различных
совпадающих элементов в нескольких разных выходных файлах.Shell
$ find . -name "*.h" -o -name "*.c" -o -name "*.cpp"Shell
$ find . \( -name "*.h" -o -name "*.c" -o -name "*.cpp" \)Спасибо сказали:
-
MiK13
- Сообщения: 1288
- ОС: Linux Debian
Re: Можно ли с помощью find искать файлы нескольких типов?
Спасибо.ormorph писал(а): ↑09.01.2026 11:34Можно так:MiK13 писал: ↑09.01.2026 10:48Пример.
Есть некий проект и я хочу найти все файлы с исходниками, то есть *.c и *.h.
Я могу задать find . -name "*.[ch]"
А если у меня файлы *.cpp? Можно ли как-то их найти вместе с файлами *.h ?
Можно, конечно, сделать find . | grep -e \\.h$ -e \\.cpp$, но, может быть, можно обойтись только find?Shell
$ find . -name "*.h" -o -name "*.c" -o -name "*.cpp"
У меня была мысли задать -name несколько раз (по аналогии с -e в grep), но я не знал, что надо ещё и -o добавлять.
(хотя можно было догадаться по аналогии с or или and в tcpdump)
Наверняка могут. Но тут есть две проблемы:
- Надо сообразить как правильно сформулировать запрос
- У бесплатных версия очень ограничено количество запросов в сутки
-
ormorph
- Сообщения: 3133
- ОС: Gentoo
-
Kopilov
- Сообщения: 957
- ОС: [K]Ubuntu, Debian
-
ormorph
- Сообщения: 3133
- ОС: Gentoo
-
Bizdelnick
- Модератор
- Сообщения: 21402
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Можно ли с помощью find искать файлы нескольких типов?
i Уведомление от модератора Bizdelnick Если хочется пофлудить, давайте делать это в соответствующем разделе.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |