Intereting Posts
Есть ли способ рассказать, сколько раз мой компьютер перезагружается за 24 часа? Использование отдельного раздела для установленного программного обеспечения Как установить Ubuntu на динамический диск Windows (схема MBR)? Взять ввод из одного файла и добавить в другой файл в конкретном столбце Какова концепция наименьшего совпадения подстрок в Unix Shell? Записывать / захватывать рабочий стол в течение определенного периода времени Простой сценарий оболочки Korn должен содержать список всех файлов, созданных / измененных после tidemark date Общая библиотека на монтировании NFS не найдена с одного хоста, отлично работает с другим Где хранятся временные файлы, используемые для установки? Прикрепить файлы для отправки почты, которые являются результатом набора команды find Qubes (Fedora 23) не войдет в систему Назначить имена столбцов diff -y Как передать функциональные клавиши в htop в tty? Что такое хороший способ сохранить резервную копию электронных писем? Ошибка Pacman add-repo, не является файлом пакета

Получить список всех файлов по маске в терминале

Я хочу найти все *.h , *.cpp файлы в папках с определенной маской, например */trunk/src* . Итак, я могу найти отдельно файлы *.h и *.cpp :

 find . -path "*/trunk/src/*.h" find . -path "*/trunk/src/*.cpp" 

Каков наилучший способ получить список файлов обоих типов ( *.h и *.cpp )?

PS Я хотел бы передать список grep .

Вы можете использовать -o для "или":

 find . -path '*/trunk/src/*.h' -o -path '*/trunk/src/*.cpp' 

который является таким же, как

 find . -path '*/trunk/src/*' \( -name '*.h' -o -name '*.cpp' \) 

Если вы хотите запустить grep для этих файлов:

 find . \( -path '*/trunk/src/*.h' -o -path '*/trunk/src/*.cpp' \) -exec grep PATTERN {} + 

или

 find . -path '*/trunk/src/*' \( -name '*.h' -o -name '*.cpp' \) -exec grep PATTERN {} + 

В bash включите опцию globstar, чтобы ** соответствовал любому уровню подкаталогов. Вы можете сделать это со своего ~/.bashrc . Также включите опции extglob , чтобы активировать расширенные шаблоны ksh.

 shopt -s globstar extglob 

Затем:

 grep PATTERN **/trunk/src/**/*.@(h|cpp) 

Помните, что версии bash вплоть до 4.2 следуют символическим ссылкам на каталоги при использовании ** .

Zsh делает это проще, вам не нужно устанавливать какие-либо параметры и просто ввести

 grep PATTERN **/trunk/src/**/*.(h|cpp) 

Если командная строка слишком длинная, и вы находитесь на Linux или другой платформе с GNU grep, вы можете сделать grep recurse вместо оболочки, чтобы сохранить длину командной строки.

 grep -R --include='*.cpp' --include='*.h' PATTERN **/trunk/src