LoginSignup
1
1

More than 5 years have passed since last update.

rcloneを使ってみた(GoogleDrive連携 on WindowsPC)

Last updated at Posted at 2017-09-04

rclone

GoogleDriveとかDropBoxとかWEBストレージサービスとファイルのやり取りができるすごいやつ。
https://rclone.org/

どうやって、どんなことをしたのか備忘までに。

其の一:Windowsローカルからファイル転送

1.準備

ファイルをGoogleDriveに転送するので、まずは設定。
https://rclone.org/drive/
これに従い、コマンドプロンプトで転送先を設定しておく。

なお、デフォルトだとC:\Users:\自分のアカウント 直下に.rclone.confがつくられる。
(confファイル指定オプションもあるので、移動・コピー可)

2.実験

コマンドプロンプトで転送実験

rclone --config .rclone.conf copy "C:\path\to\hogehoge.mp4" drive:hogehoge
3.ツリー構造の複数ファイルを転送する

今回は、フォルダ分けして整理したファイルを、フォルダツリーの名前をファイルに付与して転送する必要があった。


1_hoge
 └11_hogehoge
  └hogehoge1.mp4
  └hogehoge2.mp4
 └12_hogefuga
  └xyz.txt
2_fuga
 └21_fugafuga
  └fuga.mp4

↓こうやって転送したい

hoge_hogehoge_hogehoge1.mp4
hoge_hogehoge_hogehoge2.mp4
hoge_hogefuga_xyz.txt
fuga_fugafuga_fuga.mp4


リネームとか処理が必要なので、pythonを使うことに。(こちらも経験浅)
最終的にはこんなものを書いた。
コマンドプロンプトから引数にルートフォルダ渡す形で実行。

rclone.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import random
import sys
import time
import logging
import datetime
import re
import shutil
import subprocess

DRIVE = "drive:hogehoge"
RCCONF = ".rclone.conf"

def decode_windows(str_p):
  return str_p.decode('cp932', errors='replace')

def encode_windows(str_u):
  return str_u.encode('cp932', errors='replace')

if __name__ == '__main__':
  pdir = sys.argv[1]

  try:
    target = os.path.join(os.pardir, pdir)
    for root, dirs, files in os.walk(decode_windows(target)):
      dirname = re.sub(r'^.*' + decode_windows(pdir), '', root) #ルートフォルダ除去
      dirname = re.sub(r'\\[^\\_]*_', ' ', dirname).replace('\\', ' ') #「_」以前の除去、区切りの空白化
      dirname = re.sub(r'^ ', '', dirname) #先頭空白除去
      dirname = re.sub(r' ', '_', dirname) #空白->アンダーバー

      for f in files:
        if f.endswith('.lnk'): #リンクは除外
          continue

        if f.startswith(dirname):
          renamed = f
        else:
          renamed = dirname + '_' + f
        os.rename(encode_windows(os.path.join(root, f)), encode_windows(os.path.join(root, renamed)))

        #GoogleDriveにpush
        cmd = 'rclone --config "' + encode_windows(os.path.join(os.pardir, RCCONF)) + '" copy "' + encode_windows(os.path.join(root, renamed)) + '" ' + DRIVE
        print 'Do Copy To GoogleDrive.'
        subprocess.call(cmd, shell=True)

  except Exception as ex:
    print '\n'
    print ex
    print '\n'
    sys.exit(1)

文字化けとかハマりましたね。。。

次回

LinuxサーバーとGoogleDriveの連携

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1