【问题标题】:Linux shell: How to give parameter to alias of find command?Linux shell:如何为 find 命令的别名提供参数?
【发布时间】:2017-01-03 11:17:52
【问题描述】:

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

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

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

myfind "*Makefile" "library"

myfind的find参数是“find”命令作为“name”,“grep”命令的第二个参数,也希望星号“*”可以作为参数的一部分传递,不被解析。

这样的别名怎么写?

【问题讨论】:

    标签: linux parameters grep find alias


    【解决方案1】:

    使用功能:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 或者一个小函数。
      • 为什么这样更好? source 包含该函数的文件是额外的工作。
      • 将函数放在你的.bashrc中,调用函数时不会有+1运行bash开销+1读取文件开销。这就是函数的目标。
      【解决方案3】:

      您使用了标签 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 脚本或函数来进一步简化它。

      【讨论】:

      • @Troskkvs 奇怪,我在 ubuntu 16.04 中使用它。您是否收到错误消息或空结果?
      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      相关资源
      最近更新 更多