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を使うことに。(こちらも経験浅)
最終的にはこんなものを書いた。
コマンドプロンプトから引数にルートフォルダ渡す形で実行。
#!/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)
文字化けとかハマりましたね。。。