Bash + rclone · OneDrive ↔ Google Drive · オープンソース運用ガイド
Bash と rclone によるコピー専用のクラウド転送
rclone は、クラウドのページネーション、再試行、再開可能な転送、プロバイダーのハッシュをすでに扱えます。エンジニアリング上の課題は、これらの基本機能を、障害時に安全側へ停止し、容量を考慮する運用手順でラップすることです。
更新日 ; 20 分で読めます.
簡単な回答
大規模な移行や無人での移行には、よりシンプルなマネージド型の選択肢として FileArk を利用できます。転送をオンラインで実行し、複数テラバイト規模の処理でテストされており、完了前に各結果を確認します。データ経路をシェルから制御したい運用担当者向けには、この MIT ライセンスの Bash ラッパーが、上限を設定したバッチをローカルステージング経由でコピーし、両区間をバイト単位で検証します。ソースファイルを削除することはありません。
プロバイダーごとのクライアントを再構築せず、rclone をラップする理由
rclone は、シェルのワークフローに成熟したプロバイダー抽象化、OAuth 設定、ページネーション、再試行処理、再開可能な転送、同時実行制御、インベントリコマンド、検証コマンドを提供します。そのためラッパーは、コピー専用の動詞、上限付きのステージング、容量リザーブ、再現可能なファイルリスト、永続的な進捗記録といった、移行時に維持すべき条件に集中できます。
ただし、それだけで処理が自動化されるわけではありません。リモート設定、トークンのセキュリティ、ネットワークの稼働状況、プロセスの監視、ローカルディスク、ログ、プロバイダーの制限、失敗したオブジェクトの確認、転送先の受け入れ確認は、引き続き運用担当者が管理する必要があります。FileArk は、この手順をワークステーションやサーバー上ではなく、マネージドなオンラインワークフローとして実行したいユーザー向けのサービスです。
このスクリプトは、rclone move、sync、delete、purge、rmdirs を明示的に一切呼び出しません。検出には lsf と about、各区間のコピーには copy、全バイト検証には check --download を使用します。削除されるのは、ローカルステージングディレクトリ内の検証済みファイルだけです。
Bash 版と MIT ライセンスをダウンロード
Bash と rclone による転送プログラムをダウンロード
バッチ上限、ローカルと転送先の容量リザーブ、全バイト検証、チェックポイント、再試行制御、ネットワーク不要のデモを備えたコピー専用ラッパーです。fileark-cloud-transfer.sh · Bash 4 以降 · rclone · jq · MIT ライセンス
MIT ライセンスをダウンロード
FileArk の手動転送スクリプト 2 種に適用される許諾通知です。LICENSE-fileark-cloud-transfer.txt · MIT · プレーンテキスト
ネットワーク接続不要の運用者向けデモを実行する

このデモでは、引数解析の段階で依存関係の確認前に終了するため、rclone や jq をインストールする前でも安全に実行できます。出力には、禁止されている破壊的操作と2種類の容量リザーブが示され、最後にソースの削除件数が表示されます。
chmod +x fileark-cloud-transfer.sh
bash -n fileark-cloud-transfer.sh
./fileark-cloud-transfer.sh --demo
./fileark-cloud-transfer.sh --help運用に必要な依存関係をインストールして設定する
公式手順に従って最新の rclone リリースをインストールし、オペレーティングシステムのパッケージマネージャーから jq をインストールしてください。このラッパーでは厳密なエラー処理と新しい条件式を使用するため、Bash 4 以降が必要です。
rclone config を実行し、onedrive: と gdrive: など、それぞれ異なる名前のリモートを2つ作成します。ポリシーまたはレート制限により専用の OAuth アプリケーションが必要な場合は、ご自身のプロバイダーのクライアント ID とシークレットを入力してください。rclone は OAuth トークンを設定ファイルに保存します。このファイルには厳格なアクセス権限を設定して保護し、スクリプトには絶対に同梱しないでください。
ラッパーを実行する前に、読み取り専用の一覧取得コマンドとクォータ確認コマンドで各リモートを確認してください。対象がサブツリーだけの場合は、onedrive:Department/Archive のようなパスを使用します。
rclone version
rclone config
rclone lsd onedrive:
rclone lsd gdrive:
rclone about onedrive: --json | jq
rclone about gdrive: --json | jqデータ転送前に再現可能なインベントリを確定する
ラッパーは、明示的なタブ区切りと sp 形式を指定して rclone lsf を再帰的に実行し、サイズ、パスの順で出力します。各サイズが数値であり、各パスが相対パスであることを検証してから、検証済みチェックポイントにすでに存在するパスを除外します。
改行区切りの --files-from-raw リストでは、タブ、キャリッジリターン、改行を含むファイル名を曖昧さなく表現できないため、Bash 版はそのようなファイル名を拒否します。該当する名前がある場合は、Python 版または専用のインベントリ形式を使用してください。
パスによるチェックポイントは、意図的に単純で確認しやすい設計になっています。実行中にソースパスが変わらないことを前提としています。可能であればソースへの書き込みを停止してください。同時変更が予想される場合は、インベントリを再生成して差異を照合してください。
rclone lsf "$SOURCE" \
--recursive \
--files-only \
--format "sp" \
--separator