Linux shell: 如何给find命令的别名赋参数?

Linux shell: How to give parameter to alias of find command?

例如,我希望查找所有名为 "Makefile" 的文件的当前目录(不包括 ./bin),作为参数和 grep "library",如下所示:

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

我不想每次都输入所有这些,我只想制作一个带有 2 个参数的 "alias",例如:

myfind "*Makefile" "library"

myfind的find参数是fo "find" command as "name","grep" command的第二个参数,也希望星号“*”可以作为参数的一部分传递,没有被解析。

这样的别名怎么写?

你不能用别名来做到这一点。你可以写一个小脚本,例如

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

将其另存为 myfind 在路径中的某处,并确保删除别名。

使用函数:

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

您使用了标签 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.

因此您的任务可以通过以下方式完成:

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

当然,您可以创建一个 shell 脚本或函数来进一步简化它。