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ď č. 1Použ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.