【问题标题】:Retrieve Dropbox personal path from ~/.dropbox/info.json in Bash Script在 Bash 脚本中从 ~/.dropbox/info.json 检索 Dropbox 个人路径
【发布时间】:2014-11-29 00:48:47
【问题描述】:

在 Dropbox 2.8 版本之后,您的 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,因为可能只有一个第一级条目(即没有业务 Dropbox),并且顺序可能不同其他用户(即我不能总是依赖最后一件事

有些人建议使用 jsawk,但我不知道如何使它工作,而且我更喜欢没有依赖项,因为此脚本将在多台计算机上使用。

想法?

-- 克里斯托弗·艾伦

【问题讨论】:

    标签: json bash path find dropbox


    【解决方案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"
    

    【讨论】:

    • 谢谢。我的文件似乎是一行,但他们网站上的 Dropbox 示例是多个,所以我尝试了第二个 sed 示例。但是,我得到了一些额外的文本(一个“n”):tr '\n' ' '
    • 我主要使用 Mac,默认发行版中的 awk 版本似乎不适用于您的示例。我宁愿不必更新到 GNU 版本。谢谢!
    • tr '\n' ' '
    • @ChristopherAllen 干得好! (很抱歉:我无法使用 Mac,因此无法测试这些东西。)我将您的版本添加到了答案中。
    • 我认为最后一个版本可以在您的平台上运行?哪些?
    猜你喜欢
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2023-04-04
    • 2012-06-07
    • 2014-07-16
    相关资源
    最近更新 更多