Синтаксис для поиска в Mac OS X

4631
hekevintran

У меня есть каталог проекта, который содержит исходный код и подкаталоги исходного кода. Я хочу использовать программу Unix findдля рекурсивного поиска имен файлов определенных расширений. Версии в findLinux и 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 тоже)?

6
Было бы полезно, если бы вы сказали нам, как они ведут себя по-разному. Nifle 14 лет назад 0
Команда должна находить файлы. В OS X та же команда ничего не находит (ноль файлов). hekevintran 14 лет назад 0

2 ответа на вопрос

9
Zoredache

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

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

Получение findutils от MacPorts сделало свое дело. hekevintran 14 лет назад 1
Findutils также доступен через Homebrew. Команда после установки - `gfind` Eric Hu 12 лет назад 0
4
Debilski

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

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