Создание функции .bashrc для поиска во всех файлах определенной строки - PullRequest
2 голосов
/ 06 августа 2009

У меня есть полезная маленькая команда, которая ищет во всех файлах и подкаталогах определенную строку:

find . -name "*" -exec grep -il "search term" {} \;

Я бы хотел превратить это в функцию, которую я могу вставить в свой .bashrc и вызывать из своей оболочки, не вспоминая всего этого, но я не могу заставить ее работать. Это то, что я до сих пор:

function ff() { find . -name "*" -exec grep -il $@ \{\} \\\; }

Кто-нибудь может помочь? Большое спасибо!

Ответы [ 6 ]

4 голосов
/ 06 августа 2009
alias ff='grep -irl'

делает то же самое, но намного проще и останавливает ненужное создание процесса для каждого файла.

2 голосов
/ 06 августа 2009

Скорее всего, вам нужна утилита ack . Это похоже на функцию, которую вы описали, и более мощное. Он доступен в репозиториях Debian и Ubuntu с именем «ack-grep».

2 голосов
/ 06 августа 2009

Ну, вы можете сделать это:

function ff() { find . -name "*" -exec grep -il $@ {} ';'; }

Но это бессмысленно, не только из-за grep -r, как указывает Майк Артур, но и потому, что предложение -name "*" имеет точно такой же эффект, как и ничто. Я бы порекомендовал, если вы собираетесь делать такие вещи:

function ff() { find . -type f -exec grep -il $@ {} ';'; }
1 голос
/ 07 августа 2009

find -exec имеет ограниченный буфер и технически медленнее, чем использование xargs.

alias ff = 'find. | xargs grep -il '

будет работать лучше при поиске большого количества файлов.

0 голосов
/ 07 августа 2009

В качестве альтернативы вы можете использовать ack . Это очень поможет, если вы используете систему контроля версий.

ack -il <term>
    <=>
grep -ril <term> .
0 голосов
/ 06 августа 2009

Попробуйте это:

 $ ff ()  {      find . -name "*" -exec grep -il $@ {} \;; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...