Macos 列出我可以使用brew cask安装的应用程序

Macos 列出我可以使用brew cask安装的应用程序,macos,homebrew,homebrew-cask,Macos,Homebrew,Homebrew Cask,我想知道我的哪些应用程序可以使用brew cask命令安装。 我怎么做 规范 我想做的是从/Applications中的所有应用程序中提取brew cask上也可用的应用程序,并列出它们的软件包名称 # /Applications Alfred 4.app App Store.app AppCleaner.app Automator.app Be Focused Pro.app BetterTouchTool.app Bitdefender Bluetooth Explorer.app Boo

我想知道我的哪些应用程序可以使用
brew cask
命令安装。
我怎么做


规范
我想做的是从
/Applications
中的所有应用程序中提取brew cask上也可用的应用程序,并列出它们的软件包名称

# /Applications
Alfred 4.app
App Store.app
AppCleaner.app
Automator.app
Be Focused Pro.app
BetterTouchTool.app
Bitdefender
Bluetooth Explorer.app
Books.app
Calculator.app
Calendar.app
CheatSheet.app
Chess.app
Clipy.app
...

您可以在终端上使用
brew search
,如以下示例所示:

  • brew搜索vlc
  • brew搜索mamp
  • brew搜索松弛
  • …等等
您将获得与搜索相对应的可用brew容器,您可以使用
brew容器安装mamp
(用自己的应用程序替换
mamp

您也可以在此页面上查看所有可用的桶

如果应用程序已安装,则需要使用
brew cask安装--force mamp
强制重新安装并链接已安装的应用程序


更多的解释,你可以到这里

这可以通过使用自制的JSON API以及一些魔术(
brew安装jq
)实现

1-假设您的
.app
文件名中没有一个包含换行符(不太可能),您可以使用JSON数组获取列表。但是,由于我们将使用该列表作为查找,因此最好创建一个对象:

ls /Applications | \grep '\.app$' | jq -Rsc 'split("\n")[:-1]|map({(.):1})|add'
这将创建一个对象,每个应用程序作为一个键,
1
作为一个值(该值在这里不重要)。它的输出类似于:

{"1Password 7.app":1,"Amphetamine.app":1, "Firefox.app":1, …}
1password: 1Password 7.app
firefox: Firefox.app
google-chrome: Google Chrome.app
…
2-您可以使用
brew搜索--casks
列出所有3500+个可安装的casks。要获取描述一个或多个容器(包括它们安装的
.app
)的JSON,可以使用
brew cask info--JSON=v1…

将这两者结合起来,我们可以得到一个巨大的JSON来描述所有可安装的容器:

brew search --casks | xargs brew cask info --json=v1 > allcasks.json
这个命令在我的机器上需要10秒,所以将它保存到文件中是个好主意

3-我们现在可以筛选此列表,仅从先前列表中提取安装
.app
s的容器:

cat allcasks.json | jq -r --argjson list '{…the list…}' '.[]|(.artifacts|map(.[]?|select(type=="string")|select(in($list)))|first) as $app|select($app)|"\(.token): \($app)"'
用前面创建的对象替换
{…列表…}

这会打印出如下内容:

{"1Password 7.app":1,"Amphetamine.app":1, "Firefox.app":1, …}
1password: 1Password 7.app
firefox: Firefox.app
google-chrome: Google Chrome.app
…

如果您喜欢冒险,这里有一个一行程序可以同时执行所有这些命令:

brew search --casks|xargs brew cask info --json=v1|jq -r --argjson l "$(ls /Applications|\grep '\.app$'|jq -Rsc 'split("\n")[:-1]|map({(.):1})|add')" '.[]|(.artifacts|map(.[]?|select(type=="string")|select(in($l)))|first) as $a|select($a)|"\(.token): \($a)"'

jq
命令的分解:

.[] # flatten the list
 |  # then for each element:
   ( # take its artifacts
     .artifacts
      # then for each one of them
      | map(
         # take only arrays
         .[]?
         # select their string elements
         | select(type=="string")
         # that are also in the list
         | select(in($list)
       )
   )
   # take the first matching artifact
   | first)
   # and store it in $app
   as $app
 # then take only the elements with a non-empty $app
 | select($app)
 # and print their name (.token) and the app ($app)
 |"\(.token): \($app)"

你能详细说明一下吗?也许您正在尝试查看您已经安装的cask应用程序列表,*或者当前安装的哪些应用程序可以*升级?所有应用程序都是手动安装的(我今天知道brew cask)。我想知道brew-cask也提供了其中的哪些。如果有用,它听起来与您正在尝试的类似do@solzard我添加了一个答案,希望对您有所帮助:)看起来这不再适用于自制
=3.0.0
,因为
brew cask
命令已不存在。另外,
brew info--cask
只接受
v2
json
标志,该标志似乎不适用于提供的
jq
命令:
$brew search--casks | xargs brew info--cask--json=v2>allcasks.json
,然后
cat allcasks.json | jq-r--argjson list'{[…]}.[](.artifacts | map.)?| select(type==“string”)| select(in($list))| first)作为$app | select($app)|“\(.token):\($app)”
失败,出现
jq:error(at:1):无法使用字符串“工件”为数组编制索引。