2017-01-03 9 views
0

Например, я хочу для поиска текущего каталога (исключите ./bin) для всех файлов с именем «Makefile», в качестве аргумента и Grep «библиотеки», как показано ниже:Linux shell: Как указать параметр для псевдонима команды find?

find . ! -path "./build" -name "*Makefile"|xargs grep library 

Я не с печатать все это каждый раз, я просто хочу, чтобы сделать «псевдоним» с 2-мя параметры, как:

myfind "*Makefile" "library" 

параметра находки myfind является фо «найти» команду, как «имя», второй параметр для команды «GREP» также Я хочу, чтобы звездочка «*» могла проходить как часть параметра, без анализа.

Как написать такой псевдоним?

ответ

2

Использование функции:

myfind() { find . ! -path "./build" -name "$1"|xargs grep "$2"; } 
+0

добавьте это в ~/.bashrc довольно хорошо – dormi330

1

Вы не можете сделать это с помощью псевдонима. Вы можете написать небольшой скрипт, например.

#!/bin/bash 
find . ! -path "./build" -name "$1"|xargs grep $2 

Сохранить это как myfind где-то на своем пути и убедитесь, чтобы удалить псевдоним.

+0

или небольшая функция. –

+0

Почему это лучше? Это дополнительная работа для 'source' файла, содержащего эту функцию. – Michael

+0

поместите функцию в ваш .bashrc, и при вызове функции не будет +1 бежать накладные расходы bash +1 на чтение служебных данных. Это цель функций. –

1

Вы использовали тег Linux, поэтому я предполагаю, что вы используете GNU Grep. GNU grep (не менее grep (GNU grep) 2.25) поддерживает следующие параметры, которые делают вашу задачу очень простой. Процитирую из grep --help:

-r, --recursive   like --directories=recurse 
--include=FILE_PATTERN search only files that match FILE_PATTERN 
--exclude=FILE_PATTERN skip files and directories matching FILE_PATTERN 
--exclude-from=FILE skip files matching any file pattern from FILE 
--exclude-dir=PATTERN directories that match PATTERN will be skipped. 

Так что ваша задача может быть accomplisehd по:

grep -r --include=Makefile --exclude-dir=build library 

Конечно, вы можете создать сценарий оболочки или функции для дальнейшего упрощения этого.

+0

Спасибо, но это не сработало для моего RHEL или ubuntu. – Troskyvs

+0

@Troskkvs Странно, я использую это с ubuntu 16.04. Получили ли вы сообщение об ошибке или пустой результат? –