从Bash脚本中的〜/ .dropbox / info.json中检索Dropbox个人路径

时间:2014-10-03 22:47:13

标签: json bash path find dropbox

在2.8版本的Dropbox中,你的dropbox文件夹的路径可以在文件〜/ .dropbox / info.json中找到

在我的情况下,我正在寻找我的个人路径,而不是业务路径,这不在典型的Dropbox位置〜/ Dropbox中,而是在单独的卷上。

我的〜/ .dropbox / info.json:

{" business":{" path":" / Users / ChristopherA / ReOrient Media"," host":123456789}, " personal":{" path":" / Volumes / Cloud / Dropbox"," host":123456789}}

我尝试过使用grep / awk,但是不能非常可靠地获取路径/ Volumes / Cloud / Dropbox,因为可能只有一个第一级条目(即没有业务保管箱),并且订单可能与其他用户不同(即我不能总是依赖于最后一个用户

有些人建议使用jsawk,但我无法弄清楚如何使其工作,而且我不喜欢依赖,因为这个脚本将在多台计算机上使用。

想法?

- 克里斯托弗艾伦

1 个答案:

答案 0 :(得分:1)

使用json特定工具的解决方案将更加强大。

使用sed

仅使用sed,并假设您的json数据位于名为json的文件中,请尝试:

$ sed -n 's/.*"personal":[^}]*"path": "\([^"]*\)",.*/\1\n/p' json
/Volumes/Cloud/Dropbox

您的样本json数据全部在一行上。如果情况并非如此,那么最好在将新行传递给sed之前将其删除:

$ tr '\n' ' ' <json | sed -n 's/.*"personal":[^}]*"path": "\([^"]*\)",.*/\1\n/p'
/Volumes/Cloud/Dropbox

使用awk

$ awk -F'"' -v RS='"personal"[^}]*path":' 'NR==2 {print $2}' json
/Volumes/Cloud/Dropbox

以上使用记录分隔符的正则表达式。 GNU awk支持这一点。其他人可能会也可能不会。

Mac OSX版本

来自Christopher Allen,以下是在Mac上的作品:

tr '\n' ' ' <json | sed -n 's/.*"personal":[^}]*"path": "([^"]*)",.*/\1/p

使用bash

#!/bin/bash
data=$(cat json)
data=${data#*\"personal\":}
data=${data#*path\":}
data=${data#*\"}
data=${data%%\"*}
echo "$data"