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容器安装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):无法使用字符串“工件”为数组编制索引。
。