列出我可以使用 brew-cask 安装的应用程序
List up my apps installable with brew-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
Books.app
Calculator.app
Calendar.app
CheatSheet.app
Chess.app
Clipy.app
...
# package names of apps available on brew-cask
alfred
appcleaner
bettertouchtool
calibre
cheatsheet
clip
...
您可以在终端上使用 brew search
,例如这些示例:
brew search vlc
brew search mamp
brew search slack
- ...等等
您将获得与您的搜索相对应的可用 brew casks,您可以使用 brew cask install mamp
安装它(将 mamp
替换为您自己的应用程序)
您也可以进入此页面 https://formulae.brew.sh/cask/ 查看所有可用的木桶。
如果您的应用已经安装,您需要使用brew cask install --force mamp
强制重新安装并且link您的应用已经安装。
更多的解释可以到这里https://sourabhbajaj.com/mac-setup/Homebrew/Cask.html。
这可以使用 Homebrew’s JSON API as well as some jq
魔法 (brew install jq
)。
假设您的 .app
文件名中的 none 包含换行符(极不可能),您可以将列表作为 JSON 数组与 a command combining ls
and jq
.然而,由于我们将使用该列表作为查找,因此最好创建一个对象:
ls /Applications \
| \grep '\.app$' \
| jq -Rsc 'split("\n")[:-1]|map({(.):1})|add'
这将创建一个对象,每个应用程序作为键,1
作为值(值在这里不重要)。它输出类似:
{"1Password 7.app":1,"Amphetamine.app":1, "Firefox.app":1, …}
您可以使用 brew search --casks
列出所有 3,500 多个可安装的 casks。为了获得描述一个或多个 cask(s) 的 JSON,包括他们安装的 .app
,您可以使用 brew cask info --json=v1 <cask> …
.
结合这两个,我们可以得到一个巨大的 JSON 描述所有可安装的桶:
brew search --casks '' \
| xargs brew info --cask --json=v2 \
> allcasks.json
此命令在我的机器上需要大约 10 秒,因此将其保存在文件中是个好主意。
我们现在可以过滤此列表以仅从我们之前的列表中提取安装 .app
s 的 casks:
cat allcasks.json \
| jq -r --argjson list '{…the list…}' '.[]|.[]|(.artifacts|map(.[]?|select(type=="string")|select(in($list)))|first) as $app|select($app)|"\(.token): \($app)"'
用我们之前创建的对象替换{…the list…}
。
这会打印出如下内容:
1password: 1Password 7.app
firefox: Firefox.app
google-chrome: Google Chrome.app
…
如果您喜欢冒险,这里有一个一次性执行所有这些命令的代码:
brew search --casks '' \
|xargs brew info --cask --json=v2 \
|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:
.[] # 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)"
我想知道我的哪些应用程序可以使用 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
...
# package names of apps available on brew-cask
alfred
appcleaner
bettertouchtool
calibre
cheatsheet
clip
...
您可以在终端上使用 brew search
,例如这些示例:
brew search vlc
brew search mamp
brew search slack
- ...等等
您将获得与您的搜索相对应的可用 brew casks,您可以使用 brew cask install mamp
安装它(将 mamp
替换为您自己的应用程序)
您也可以进入此页面 https://formulae.brew.sh/cask/ 查看所有可用的木桶。
如果您的应用已经安装,您需要使用brew cask install --force mamp
强制重新安装并且link您的应用已经安装。
更多的解释可以到这里https://sourabhbajaj.com/mac-setup/Homebrew/Cask.html。
这可以使用 Homebrew’s JSON API as well as some jq
魔法 (brew install jq
)。
假设您的
.app
文件名中的 none 包含换行符(极不可能),您可以将列表作为 JSON 数组与 a command combiningls
andjq
.然而,由于我们将使用该列表作为查找,因此最好创建一个对象:ls /Applications \ | \grep '\.app$' \ | jq -Rsc 'split("\n")[:-1]|map({(.):1})|add'
这将创建一个对象,每个应用程序作为键,
1
作为值(值在这里不重要)。它输出类似:{"1Password 7.app":1,"Amphetamine.app":1, "Firefox.app":1, …}
您可以使用
brew search --casks
列出所有 3,500 多个可安装的 casks。为了获得描述一个或多个 cask(s) 的 JSON,包括他们安装的.app
,您可以使用brew cask info --json=v1 <cask> …
.结合这两个,我们可以得到一个巨大的 JSON 描述所有可安装的桶:
brew search --casks '' \ | xargs brew info --cask --json=v2 \ > allcasks.json
此命令在我的机器上需要大约 10 秒,因此将其保存在文件中是个好主意。
我们现在可以过滤此列表以仅从我们之前的列表中提取安装
.app
s 的 casks:cat allcasks.json \ | jq -r --argjson list '{…the list…}' '.[]|.[]|(.artifacts|map(.[]?|select(type=="string")|select(in($list)))|first) as $app|select($app)|"\(.token): \($app)"'
用我们之前创建的对象替换
{…the list…}
。这会打印出如下内容:
1password: 1Password 7.app firefox: Firefox.app google-chrome: Google Chrome.app …
如果您喜欢冒险,这里有一个一次性执行所有这些命令的代码:
brew search --casks '' \
|xargs brew info --cask --json=v2 \
|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:
.[] # 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)"