6

У меня есть каталог проекта, который содержит исходный код и подкаталоги исходного кода. Я хочу использовать программу Unix find для рекурсивного поиска имен файлов определенных расширений. Версии find в Linux и Mac OS X ведут себя по-разному.

# Works in Linux
find . -type f -regex ".*\.\(py\|html\)$"

# Neither of these works in Mac OS X
find . -type f -regex ".*\.\(py\|html\)$"
find . -type f -regex ".*\.(py|html)$"

Как мне написать эту команду, чтобы она работала в Mac OS X (и, надеюсь, в Linux тоже)?

2 ответа2

9

Mac OS X использует BSD find, и большинство дистрибутивов Linux поставляются с GNU find. Я считаю, что вы можете установить GNU findutils на Mac OS X. У меня нет под рукой Mac, но я уверен, что он был доступен в MacPorts.

Глядя на справочную страницу BSD find, я могу сделать предположение и предложить попробовать опцию -E чтобы включить современную библиотеку регулярных выражений.

4

Следующую работу с BSD найди на OS X.

find -E . -type f -regex ".*\.(py|html)$"

find . -type f | grep -e ".*\.\(py\|html\)$"

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