ShellScript에서 Google 크롬 북마크 열기

14033 단어 ShellScript

소개



모두가 매우 유용한 Go 도구의 fzf을 사용하여 터미널에서 Chrome 북마크를 여는 명령을 만들었습니다.

Github 저장소
htps : // 기주 b. 코 m / 류 세이 만 / 보오 kma rk_fzf



CLI에서 북마크 정보 얻기



이 명령을 실행하려면 Google 계정에 연결된 북마크 정보를 ShellScript로 가져와야합니다.
Google 크롬의 북마크 정보는 귀하의 로컬 컴퓨터의 다음 디렉토리에 저장되며 cat 명령 등으로 내용을 얻을 수 있습니다.
cat ~/Library/Application\ Support/Google/Chrome/Default/Bookmarks

내용은 JSON 형식으로 다음과 같이 약간 복잡하게 중첩됩니다.
{
   "checksum": " ",
   "roots": {
      "bookmark_bar": {
         "children": [ {
         {
            "date_added": " ",
            "guid": " ",
            "id": " ",
            "name": "ほげサイト",
            "type": "url",
            "url": "https://hoge/fuga"
         }, {
            "date_added": " ",
            "guid": " ",
            "id": " ",
            "name": "ふがサイト",
            "type": "url",
            "url": "https://hoge/piyo"
         } ],
         "date_added": " ",
         "date_modified": " ",
         "guid": " ",
         "id": " ",
         "name": "ブックマーク バー",
         "type": "folder"
      },
.
.
. // この下にもずらーっとモバイルのブックマーク情報などが続く

이 중에서도 이번에는 PC 브라우저에서 등록 된 북마크 만 취급하므로roots > bookmark_bar > children 키 정보를 반전합니다.

ShellScript로 JSON 퍼스



ShellScript에서 JSON을 가챠가챠 할 때는 jq 명령이 유명하네요.
이번에도 jq 명령으로 구현을 해 나갑니다.
아래와 같이 jq 커멘드의 인수로서 키명을 건네주면 JSON을 탐색해 키에 연결한 정보를 취득하는 것이 가능합니다. 매우 편리하네요!
jq 커맨드의 상세한 사용법에 대해서는, 이 기사 가 매우 알기 쉽습니다(`・ω・´)
data=`cat ~/Library/Application\ Support/Google/Chrome/Default/Bookmarks`
bookmark_list=$(echo $data | jq .roots.bookmark_bar.children)
echo $bookmark_list

이 세 줄은 처음에 cat으로 표시한 복잡한 JSON에서 북마크 목록만 출력할 수 있습니다.

그리고는 for문이라 while문으로 돌려 갑니다.
i=0
while [ $i -lt $len ];
do
    row_data=$(echo $bookmark_list | jq .[$i])
    type=$(echo $row_data | jq .type)

    name=$(echo $row_data | jq .name)
    url=$(echo $row_data | jq .url)
    echo "${name} : ${url}"
    (( i++ ))
done

북마크가 폴더인 경우



북마크를 대량으로 등록하고 있는 분이라면 북마크 폴더를 다양하고 있을까 생각됩니다.
Bookmarks의 JSON은 폴더 유형의 북마크에 대해 다음과 같이 정의됩니다.
.
.
.
# ======中略==========
}, {
            "children": [ {
               "date_added": " ",
               "guid": " ",
               "id": " ",
               "name": "ほげサイト",
               "type": "url",
               "url": "https://hoge/fuga"
            }, {
               "date_added": " ",
               "guid": " ",
               "id": " ",
               "name": "ふがサイト",
               "type": "url",
               "url": "https://fuga/piyo"
            } ],
            "date_added": " ",
            "date_modified": " ",
            "guid": " ",
            "id": " ",
            "name": "フォルダだよ",
            "type": "folder"
         }, {
roots > bookmark_bar > children 키 안에 더 children 키가 있고 그 안에 북마크의 정보가 담겨 있습니다.
흠, 첫견에서는 너무 복잡해서 손으로 올립니다(´・ω・`)

유일하게, type 라고 하는 키를 기초로 폴더인가 어떤가를 판별할 수 있으므로, 이것을 이용해 구현을 합니다.
row_data=$(echo $bookmark_list | jq .[$i]) #$iはループ中の変数
type=$(echo $row_data | jq .type)

if [ $type = "\"folder\"" ]; then
    #folderの中をさらに探索する
fi

이 방법으로 로컬에 저장된 Bookmark JSON과 jq 명령을 사용하면 조금 복잡하지만 북마크 정보를 얻을 수 있습니다.
그리고는 URL의 키를 취득하는 등 북마크를 여는 것도 가능합니다.

Reference



jq
fzf
jq 명령을 사용하는 일상 소개

좋은 웹페이지 즐겨찾기