web-dev-qa-db-ja.com

LinuxでOneDrive Business / Office 365を同期する方法

Microsoft OneDrive Business/Office 365 Proは1 TBのクラウドストレージを提供していますが、残念ながらLinuxで同期する方法はありませんでした。

23
Sayed Metwaly

現在、実験的なOneDrive-dは、Microsoft Sharepointリンクを受け入れないため、個人のOneDriveアカウントのみを同期できるオープンソースプログラムです。 GoodSync for Linux を使用してOneDrive Business/Office 365を同期する方法を次に示します。これは個人での使用は無料です。

  1. Linuxマシンに適切なバージョンをインストールします。例:

    ./goodsync-linux-x86_64-release.run
    

    GoodSync ConnectセットアップとGsServer Web UIの両方に対してnoで回答します。

  2. WebブラウザーでOneDriveを開きます。右下の[クラシックOneDriveに戻る]を選択します。
  3. ブラウザのWebアドレスはhttps://xxxxxxx.sharepoint.com/xxxxxxxxxxx/Documents/Forms/All.aspxのようになり、それに基づいて同期リンクを取得します。これはoffice365://xxxxxxx.sharepoint.com/xxxxxxxxxxx/Documentsになります。
  4. 自宅の.goodsyncサブフォルダーに新しいファイルを作成します。

    gedit ~/.goodsync/jobs.tix
    
  5. ファイルに次のコードを入力して保存します。

    <Job>
    Name = "OneDrive_Sync"
    Side1 = <SideOptions>
    Dir = <Connect>
        Url = "put_your_syncing_link_here"
        UserID = "put_your_OneDrive/Office365_Bussiness_email_here"
    </Connect>
    </SideOptions>
    Side2 = <SideOptions>
    Dir = <Connect>
        Url = "file:///your_home_folder/one_drive_folder"
    </Connect>
    </SideOptions>
    Direction = 0
    ExcludeHidden = No
    ExcludeSystem = No
    DetectMovesAndRenames = Yes
    LinksOption = 1
    ExcludeEmptyFolders = No
    LimitChangesPercent = 100
    AutoResolveConflicts = 3
    DetectMovesAndRenames = Yes
    </Job>
    
  6. 同期プロセスを開始します。

    gsync sync "OneDrive_Sync"
    
  7. このステップでは、WebブラウザーがOneDrive/Office 365ページを開き、goodsyncがアカウントにアクセスできるようにするための承認を求めます。資格情報を入力すると、同期が開始されます。

制限:マイクロソフトは270文字を超える長さのURLリクエストを許可しないため、GoodSyncは長いパス名を持つファイルを同期できません。

楽しい!

7
Sayed Metwaly

Ubuntu 18.04以降

Ubuntu 18.04以降のデフォルトのUbuntuリポジトリにはOneDriveクライアントがあります。 OneDriveは、Microsoftのクラウドストレージシステムです。このパッケージは、OneDriveクラウドストレージとの同期に特化したコマンドラインクライアントを提供します。

以下でインストールします:

Sudo apt install OneDrive

最初の実行時に、リンクで認証するように求められます。認証後、systemctl --user enable OneDrivesystemctl --user start OneDriveでデーモンを有効にできます。詳細については、マンページman OneDriveを参照してください。セットアップは非常に簡単で、所要時間はわずか5分です。

4
Mattia_98

Xybuが元々使用していたonedrivedツールは、OneDrive for Businessではなく個人のOneDriveのみをサポートしています。ただし、 derrix060によるGitHubでのこのプロジェクトの分岐 があり、ビジネスクライアント向けに何らかの形で(まだバグがありますが)実装されています。

警告:この方法を使用する場合は、 https:/でオンラインでファイルをチェックして、ファイルが正しく同期されたことを常に確認することを強くお勧めします/www.office.com 、および/またはこのページの最後に示すラッパースクリプトを使用して、少なくともデスクトップ通知を使用してエラーを通知します!

Onedrivedが一部の変更の取得に失敗したり、正しくアップロードしたりして、OneDriveが(部分的に)同期されていない状態になることがあります。また、何らかの理由で自身とのマージの競合が発生し、ホスト名を括弧とオプションで数字で追加することにより、ファイルの名前をローカルで変更することもあります。残念ながら、エラーに関する通知はありませんが、ログファイルのエントリを見ることができます。

これが発生した場合は、たとえば、それらに触れたり、名前を変更したり、フォルダーの名前を変更したりします。

ヒント:onedrivedライブラリには、特にOneDriveルートに直接保存されたファイルに関する問題があることが多いようです。 OneDriveフォルダーに直接ダンプするのではなく、すべてのファイルをサブディレクトリに配置する方がおそらく良いでしょう。

馬鹿げているように聞こえますが、ファイルを作成またはコピー/移動するよりも、OneDrive Webクライアントを介してファイルをアップロードし、ローカルフォルダーに同期されるまで待機する(ただし数分かかる場合がある)方が問題が少ないようです。ローカル。これが実用的であるか完全に無効であるかは、OneDriveの目的はあなた自身の決定次第です...

完全なインストール手順については、プロジェクトのreadmeファイルを参照してください。ただし、簡単な要約を次に示します。

Installation

  1. onedrived(またはOneDrive-d)の他のバージョンがインストールされていないことを確認してください。

  2. 依存関係パッケージをインストールします。

    Sudo apt install build-essential python3-dev libssl-dev inotify-tools python3-dbus libdbus-1-dev libdbus-glib-1-dev
    
  3. https://ngrok.com/download の公式WebサイトからLinux用の最新のngrokクライアントをダウンロードします。 Ubuntuリポジトリのngrok-clientパッケージは古すぎるため、要件を満たしていません。
    ダウンロードしたngrok-stable-linux-AMD64.Zipアーカイブを解凍します。単一のngrokバイナリが含まれており、$PATHの場所に配置する必要があります。 /usr/local/bin/に。
    ngrokへのサインアップはおそらく必要ありません。

  4. pip3を使用して、GitHubからonedrived Python3アプリケーションをインストールします。

    Sudo -H pip3 install git+https://github.com/derrix060/onedriveClient.git
    
  5. 必要に応じて、onedrivedのログファイルの場所を設定します。ここでは、何かが正常に機能しない場合に問題をチェックできます。

    onedrived-pref config set logfile_path ~/.config/onedrived/onedrived.log
    

アカウントのセットアップとドライブの構成

インストールが成功したら、アカウントとドライブを設定する必要があります。

  1. 以下を実行して、インタラクティブモードを使用してOneDrive for Businessアカウントを追加します。

    onedrived-pref account add -b
    

    対話型ウィザードは、ブラウザでリンクを開くように2回要求します。このリンクでは、Microsoft Businessアカウントでアプリケーションを承認する必要があります。
    承認を確認した後、リダイレクト先のURLをインタラクティブウィザードに貼り付けるように求められます。指示どおりに実行し、コマンドの指示に従ってください。

  2. 以下のコマンドの出力を確認して、アカウントが正常に追加されたことを確認します。次のように表示され、ログインしているアカウントがリストされます。

    $ onedrived-pref account list
    
    All OneDrive accounts associated with user "YOUR_UBUNTU_USERNAME":
    
      #  Account ID                 Owner Name     Email Address         Profile Type
    ---  -------------------------  -------------  --------------------  --------------
      0  YOUR_PERSONAL_ACCOUNT_ID   YOUR_NAME      YOUR_BUSINESS_EMAIL   Business
    
  3. 以下を実行して、ドライブを対話型コマンドモードで構成します。

    onedrived-pref drive set
    

    すべてのドライブのリストが表示され、ローカル構成に追加するドライブの行番号の入力を求められます。
    次に、ドライブと同期するためのルートフォルダーとして使用するローカルディレクトリを指定する必要があります。あなたはただ打つことができます Enter デフォルトの~/OneDriveを使用します。パスが存在しない場合は作成されます。使用したい無視ファイルへのパスについても同じです。 Enter デフォルトの~/.config/onedrived/ignore_v2.txtを使用し、必要に応じて作成します。

  4. 以下のコマンドの出力を確認して、使用可能な構成済みのすべてのドライブに関する情報を表示します。 Drives that have been set upの見出しの下に、正しい設定でセットアップしたドライブが表示されます。

    onedrived-pref drive list
    

デーモンの起動

ドライブが構成されたので、onedrivedデーモンを試して起動する必要があります。そうでなければ見逃してしまうような問題がある場合に備えて、まずデバッグモードで起動することをお勧めします。これはフォアグラウンドでonedrivedを開始します:

onedrived start --debug

すべてが正常で、コマンドがクラッシュして終了しない場合は、ローカルのOneDriveフォルダーにいくつかのファイルを配置して、同期するかどうかを確認してください。 https://www.office.com のOneDrive Webアプリケーションにアクセスし、ローカルに追加したファイルがそこに表示されているかどうかを確認することで、おそらく確認できるはずです。

を押して、端末のonedrivedプロセスを再び終了できます。 Ctrl+C

onedrivedを正常に起動するには、バックグラウンドデーモンとして、次のコマンドで実行します。

onedrived start

おそらく、このコマンドをスタートアップアプリケーションに追加して、ログインするたびに自動起動するようにする必要があります。詳細については、 ログイン時にアプリケーションを自動的に起動する方法 を参照してください。

エラー通知のラッパー

onedrivedがエラー(ファイル同期の失敗など)をログに記録するたびにデスクトップ通知を取得する場合、ログファイルをリアルタイムで解析し、notify-sendを使用して表示するラッパースクリプトを次に示します。

onedrived startコマンドの代わりに、引数なしでラッパースクリプトを開始(または自動開始アプリケーションに配置)できます。

#!/bin/bash
LOGFILE=~/.config/onedrived/onedrived.log
ICON_START=weather-overcast
ICON_STOP=weather-few-clouds
ICON_ERROR=weather-severe-alert

onexit () {
    onedrived stop
    notify-send -i "$ICON_STOP" "OneDrive" "Wrapper stopped"
    echo "onedrived-wrapper stopped"
}

trap onexit EXIT

onedrived stop
echo "---" >> "$LOGFILE"

onedrived start || {
    echo "Failed to start onedrived!"
    exit 1
}
notify-send -i "$ICON_START" "OneDrive" "Wrapper started"

echo "Monitoring onedrived.log for error messages..."
tail -n 1 -F --pid="$(pgrep -f "onedrived start")" "$LOGFILE" |
    while read LINE ; do
        echo "$LINE"
        if MESSAGE="$(grep -Pio '(?<=ERROR: ).*' <<< "$LINE")" ; then
            notify-send -i "$ICON_ERROR" "OneDrive Error" "$MESSAGE"
        fi
    done
2
Byte Commander