通过通配符模式查找程序名称

通过通配符模式查找程序名称

我正在尝试编写一个脚本来尝试查找是否安装了某个程序。假设该程序名为 myprog。问题是程序可以用不同的格式命名,例如“prefix-myprog”、“myprog”和“prefix_myprog”。如果我使用:

which myprog

那么只有当它被准确命名为 myprog 时,命令行才会返回正确的位置。

有没有一种方法可以使用某种通配符找到所有可能的实例?

谢谢

答案1

find /bin /sbin /usr -type f | grep -i myprog

查找目录 /bin、/sbin 和 /usr 中的所有文件,然后过滤“myprog”。

man find

man grep

apropos myprog也可能有用。

man apropos

或者怎么样locate -r myprog

man locate

答案2

$PATH您可以依次循环遍历每个目录中的条目并展开通配符。

set -f; IFS=:
for dir in $PATH; do
  ls $dir/*myprog* 2>/dev/null
done
set +f; unset IFS

在 zsh 中,这要简单得多:

ls $path/*myprog*(N)

顺便一提,避免which、使用typecommand -v替代

相关内容