Як би я шукав у всіх .java-файлах простий рядок (а не регулярний вираз) у поточному каталозі та всіх підкаталогах на Mac OS X? Я просто хочу надрукувати список імен файлів і директорій, які відповідають.
Як би я шукав у всіх .java-файлах простий рядок (а не регулярний вираз) у поточному каталозі та всіх підкаталогах на Mac OS X? Я просто хочу надрукувати список імен файлів і директорій, які відповідають.
Відповіді:
І завжди популярний
find . -name '*.java' | xargs grep -l 'string'
EDIT (Франк Щебра):
Якщо ви маєте справу з назви файлів або каталогів, у яких є пробіли, найбезпечніший спосіб це зробити:
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
Завжди існує більше ніж один спосіб зробити це.
mdfind
це більш OSXy спосіб це зробити !
Традиційна відповідь UNIX була б такою, яку прийняли на це питання:
find . -name '*.java' | xargs grep -l 'string'
Це, ймовірно, буде працювати для файлів Java, але пробіли у назви файлів набагато частіше зустрічаються на Mac, ніж у традиційному світі UNIX. Коли назви файлів з пробілами передаються по трубопроводу вгорі, xargs інтерпретуватиме окремі слова як різні назви.
Те, що ви насправді хочете, це звести нанівець розділення імен, щоб зробити межі однозначними:
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
Як пропонує Марк, альтернатива полягає в тому, щоб дозволити знаходити запуск grep для вас, хоча такий підхід повільніше, якщо ви шукаєте велику кількість файлів (так як grep викликається один раз на файл, а не один раз з усім списком файлів).
Використовуйте греп, який краще, ніж греп, ack :
ack -l --java "string"
Це дійсно буде використовувати регулярний вираз, якщо ви хочете, просто тримайтеся подалі від метахарактерів або уникайте їх, і ви можете шукати рядки.
find . -iname "*.java" -exec egrep -il "search string" {} \;
grep -rl --include="*.java" simplestring *
Пропустіть find
та скористайтеся Spotlight
з командного рядка. Набагато потужніше!
КОМАНДА ЛІНІЙНОГО СВЯТЛЕННЯ - ЗНАЙДІТЬСЯ ЗАСОБИ ВЕЛИКИЙ
Більшість людей не знає, що ви можете шукати в центрі уваги з командного рядка. Навіщо пам’ятати про всі таємні варіанти пошуку та грепування, а що ні, коли ви можете дозволити Spotlight зробити роботу за вас. Інтерфейс командного рядка до прожектора називається mdfind. Він має таку ж потужність, що і пошук GUI Spotlight, і більше, тому що він написаний в командному рядку!
Дайте про це:
grep -rl "string" */*java
Ви також можете використовувати програму GUI типу TextWrangler, щоб зробити більш інтуїтивний пошук там, де параметри знаходяться в інтерфейсі.
grep "(your string)" -rl $(find ./ -name "*.java")
Якщо ви хочете ігнорувати регістр, замініть -rl на -irl. (ваш рядок) також може бути регулярним виразом, якщо ви коли-небудь побачите потребу.