作曲・浄書・指導・音響

金沢音楽制作

金沢音楽制作では、楽曲・楽譜の制作と、作曲や写譜などレッスンを行っています。

google-drive-ocamlfuse Manager

google-drive-ocamlfuseを対話型で操作するスクリプトです。「Google Driveを使う」でも述べましたが、Linuxで無理してGoogle Driveを使う必要はありません。DropBoxが公式でLinux用のパッケージを配布しています。環境:google-drive-ocamlfuse

実行画面

処理を数字で選択する対話式のスクリプトです。$HOMEにGoogleDriveディレクトリを作成し、そこにマウントします。アンマウント時には、中にファイルがなければディレクトリが削除されます。

>>> _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
>>> _/ Google-Drive-Ocamlfuse Manager _/
>>> _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
>>>
>>> Please input 1 to 5 or q.
>>> ===========================
>>> 1) Mount GoogleDrive
>>> 2) Unmount GoogleDrive
>>> 3) Update GoogleDrive
>>> 4) Lazy Unmount GoogleDrive
>>> 5) Check Condition
>>> q) Quit
>>> Input number: 1
>>>
>>> Mounted.

$ ls ~
Desktop   Downloads    Music     Tempalates
Document  GoogleDrive  Pictures  Videos

[目次へ]

GoogleDrive Ocamlfuse Managerのコード

長い割には大したことしていません。とはいえ、エラー処理をもう少し丁寧にしても良かったかもしれませんね。

#!/bin/bash

# Mount directory for GoogleDrive
declare -r GD=~/GoogleDrive

fn_main() {
  echo ">>> _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/"
  echo ">>> _/ Google-Drive-Ocamlfuse Manager _/"
  echo ">>> _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/"

  while :
  do
    echo ">>> Please input 1 to 5 or q."
    echo ">>> ==========================="

    fn_show_manu

    echo -n ">>> Input number: "
    read input
    echo ">>>"
    case $input in
      1)
        fn_mnt
        break
        ;;
      2)
        fn_unmnt
        break
        ;;
      3)
        fn_update
        break
        ;;
      4)
        fn_lazy_unmnt
        continue
        ;;
      5)
        fn_check_condition
        continue
        ;;
      [qQ])
        echo ">>> Bye. "
        echo ""
        break
        ;;
      *)
        continue
        ;;
    esac
  done
}

fn_show_manu() {
  declare -a MENU=(">>> 1) Mount GoogleDrive" ">>> 2) Unmount GoogleDrive" \
    ">>> 3) Update GoogleDrive" ">>> 4) Lazy Unmount GoogleDrive" \
    ">>> 5) Check Condition" ">>> q) Quit")

  for show in "${MENU[@]}"; do
    echo $show
  done
}

fn_mnt() {
  if [ -d $GD ]; then
    fn_connect
    if [ $? = 1 ]; then
      echo ">>> Already mounted."
      fn_wait_input
      echo ">>>"
      echo ">>>"
      return
    fi
  else
    mkdir $GD > /dev/null 2>&1
    fn_connect
  fi
  echo ">>> Mounted."
  echo ""
  exit
}

fn_unmnt() {
  if [ -d $GD ]; then
    fn_fuser
    [ $? = 2 ] && return
    rmdir $GD > /dev/null 2>&1
    echo ">>> Unmount."
  else
    echo ">>> No mounted."
    fn_wait_input
    echo ">>>"
    return
  fi
  echo ""
  exit
}

# Check busy with GoogleDrive
fn_fuser() {
  fusermount -u $GD > /dev/null 2>&1
  if [ $? = 1 ]; then
    echo ">>> GoogleDrive is busy now."
    echo ">>> Please do it later."
    fn_wait_input
    echo ">>>"
    return 2
  fi
  # -cc clear cashe
  google-drive-ocamlfuse -cc > /dev/null 2>&1
}

fn_update() {
  if [ -d $GD ]; then
    fn_fuser
    [ $? = 2 ] && return
    fn_connect
    echo ">>> Updated."
    echo ""
    exit
  else
    echo ">>> Not mounted."
    fn_wait_input
    echo ">>>"
  fi
}

fn_lazy_unmnt() {
  fusermount -zu $GD > /dev/null 2>&1
  if [ $? = 0 ]; then
    echo -n ">>> Are you sure you want to lazy this drive? [Y/n] "
    while true; do
      read answer
      case $answer in
        ''[Yy]*)
          echo ">>> Lazy Unmount GoogleDrive."
          rmdir $GD > /dev/null 2>&1
          break
          ;;
        [Nn]*)
          break
          ;;
        *)
          echo -n ">>> Please input. [Y/n] "
          ;;
      esac
    done
  else
  echo ">>> Not mounted."
  fi
  fn_wait_input
  echo ">>>"
}

fn_check_condition() {
  if [ -d $GD ]; then
    if ls -d $GD/* > /dev/null 2>&1; then
      echo ">>> Found. $GD"
      echo ">>> And already mounted."
    else
      echo ">>> Found. $GD"
      echo ">>> But not mounted (no files)."
    fi
  else
    echo ">>> Not found. $GD"
  fi
  fn_wait_input
  echo ">>>"
}

# Wait until press any key
fn_wait_input() {
  read -sn 1 -p ">>> Press any key to continue..."
  echo ""
}

# Cennection to GoogleDrive
fn_connect() {
  google-drive-ocamlfuse $GD > /dev/null 2>&1
  return 1
}

fn_main

# HASE Kazuaki <hase at hkmc.jp>

[目次へ]

[ノート一覧へ]

更新情報

  • 公開日:2020-07-04