Я хочу сделать некоторую обработку только с исходными файлами типа .h, .m, .mm
. Я НЕ хочу включать файлы .html
.Совпадение файлов .h, .m, .mm, но NOT .html
Следующие файлы пропускаются .mm, так как я только сопоставляю .h
или .m
и не пытаюсь уловить длинные расширения.
find ./ -type f -name "*.[hm]"
Это только ловит файлы .mm, как? оператор всегда соответствует символу. Я хотел бы, чтобы это было необязательное ноль или одно совпадение, как в regex.
Но если я использую * вместо этого, оно соответствует 0 или нескольким символам. Это возвращает все, но также имеет .html-файлы, которые я не хочу.
find ./ -type f -name "*.[hm]*"
Любые идеи о том, как это сделать?
Если вы предпочитаете использовать 'regex' шаблоны,' find' имеет такую возможность. Попробуйте 'find. -regex ". * \. \ (h \ | m \ | mm \)". – alvits
@alvits Это именно то, что я искал, но я не могу заставить ваш пример работать. Как только я положил в | состояние это ломается. Я также попробовал следующее более простое регулярное выражение, которое использует? как нулевой вариант или один матч без везения. 'найти. -type f -regex ". * \. [hm] m?" ' –
Правильное регулярное выражение для этого будет' find. -regex ". * \. \ ([hm] \ | mm \)". – alvits