如何在终端中读取PLIST文件中的特定值



我正试图访问MAC操作系统上plist文件中的特定属性,但该属性的名称中有空格,无法访问。

这是我尝试的请求,但它返回了我所有的SpacesDisplayConfiguration:

$defaults read com.apple.spaces SpacesDisplayConfiguration Space Properties

我认为这只是一个语法错误,但我找不到问题所在。

如果你喜欢做丑陋的事情,你可以做一些非常丑陋的事情,比如:

defaults read com.apple.spaces > /tmp/$$.plist
/usr/libexec/PlistBuddy -c 'print :SpacesDisplayConfiguration:Space Properties' /tmp/$$.plist

尽管这可能不那么丑陋:

/usr/libexec/PlistBuddy -c 'print SpacesDisplayConfiguration:Space Properties' $HOME/Library/Preferences/com.apple.spaces.plist

下面的尝试不起作用,如果有人知道为什么他们可以ping我——我想这与bash过程替换不可用有关。

defaults read com.apple.spaces | /usr/libexec/PlistBuddy -c 'print :SpacesDisplayConfiguration:Space Properties' /dev/stdin
defaults read com.apple.spaces | /usr/libexec/PlistBuddy -c 'print :SpacesDisplayConfiguration:Space Properties' -
/usr/libexec/PlistBuddy -c "print" <(defaults read com.apple.spaces)

比Amin的答案短4个符号;-(

grep -A 1 <key> path/to/file.plist

我只是简单地使用了catgrep。不那么优雅,但简单实用:

cat path/to/file.plist | grep -A 1 <key>

输出示例:

<key>slideScanBlurThreshold</key>
<real>0.0</real>

不可能在根级别更深的级别中read特定属性

如果您可以下载一个工具,Scout可以读取键中有空格的嵌套值。

scout read -i $HOME/Library/Preferences/com.apple.spaces.plist -f plist 
"SpacesDisplayConfiguration.Space Properties"

有问题的特定属性不是字符串,而是字典数组。

将打印每个空间中的空间名称和窗口ID的最低python代码(至少需要v3.5(:

#!/usr/bin/env python3
import plistlib
from pathlib import Path
with (Path.home() / "Library/Preferences/com.apple.spaces.plist").open('rb') as fi:
plist = plistlib.load(fi)
spaces = plist['SpacesDisplayConfiguration']['Space Properties']
for space in spaces:
print('name:', space['name'])
print('windows:', space['windows'])
# SAMPLE OUTPUT:
# name: 
# windows: [7227, 7168, 5383, 6338, 6202, 5312, 6093, 6755, 6669, 6438, 6314, 4984, 4637, 3916, 6061, 5977, 5973, 80, 6452]
# name: F10F36F4-2698-4DC0-9D1E-769712C306CC
# windows: [5370, 3565, 213, 7190, 6142, 7105, 7146, 5948, 6138, 6141, 6140, 6139, 1353, 4673, 6021, 5925, 1585, 5892, 6453]

这种方法将同时适用于二进制和XML.plist文件

最新更新