/ / Linux shell: Ako dať parameter aliasu príkazu find? - linux, parametre, grep, find, alias

Linux shell: Ako dať parameter alias nájsť príkaz? linux, parametre, grep, find, alias

Napr. Chcem vyhľadať aktuálny adresár (vylúčiť ./bin) pre všetky súbory s názvom „Makefile“, ako argument a grep „knižnica“, ako je uvedené nižšie:

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

Nemusím ich písať zakaždým, chcem len vytvoriť alias s 2 parametrami, napríklad:

myfind "*Makefile" "library"

myfind's s find parameter for "find" command as "name" , druhý parameter pre príkaz "grep", tiež si prajem, aby hviezdička "*" mohla byť odovzdaná ako súčasť parametra bez toho, aby bola analyzovaná.

Ako napísať taký alias?

odpovede:

2 pre odpoveď č. 1

Použiť funkciu:

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

1 pre odpoveď č. 2

Toto nemôžete urobiť pomocou aliasu. Môžete napísať malý skript, napr.

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

Uložte to ako myfind niekde na vašej ceste a uistite sa, že ste alias odstránili.


1 pre odpoveď č. 3

Použili ste značku linux, takže predpokladám, že používate GNU grep. GNU grep (minimálne grep (GNU grep) 2.25) podporuje nasledujúce možnosti, vďaka ktorým je vaša úloha veľmi jednoduchá. Nechaj ma citovať 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.

Vaša úloha tak môže byť splnená:

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

Samozrejme môžete vytvoriť shell skript alebo funkciu, aby ste to ďalej zjednodušili.