найдите все cpp файлы и перечислите только те файлы с именами, которые соответствуют шаблону (regex), не работает

Параметры -name и -exec показывает, что "шаблон имени файла или каталога для поиска" и "выполняет что-то на каждом из подобранных получающихся файлов или каталогов". {} заменен результаты, соответствующие -name шаблон, так, чтобы -exec оператор может использовать их в качестве аргументов выполняемым командам. Наклонная черта влево \; показывает конец команды находки. Двойные тире -- обычно средства долгие опции, например. ls --all и единственный тире - средства короткая опция, например. ls -a. Они оба имеют в виду точно то же.

2
01.03.2013, 13:01
2 ответа

Это швы, чтобы хорошо работать, если Вы удаляете "строку 1 и 2 при получении аргументов:

IN_REGEX=$1
OUT_REGEX=$2

find . -name '*'.cpp | grep $IN_REGEX | grep -v $OUT_REGEX
0
27.01.2020, 22:01
  • 1
    Кавычки не будут иметь значения там ни в какой подобной Границе оболочке уже не говоря об ударе. Более вероятно был некоторый невидимый символ как возврат каретки после кавычки. Вам нужны кавычки вокруг $IN_REGEX и $OUT_REGEX хотя (и -- отметить конец опций или использовать -e опция к grep). Вы могли бы хотеть -E опция, таким образом, можно заменить Ваш \| (который между прочим не является стандартным) с | (который является стандартным). –  Stéphane Chazelas 01.03.2013, 17:18

Можно использовать !(инвертируйте) и -path командные коммутаторы find выполнять это

$ find . \( ! -path "*bar*" -a ! -path "*bar2\/bar3*" -a -path "*foo*" -print \)

Это будет искать в папках, исключая bar, bar2/bar3, и включая папки с foo в пути. Дайте этому попытку. Синтаксис мог бы измениться с различными версиями find команда.

Относитесь находят страницу справочника для получения дополнительной информации.

4
27.01.2020, 22:01

Теги

Похожие вопросы