LoginSignup
7
3

More than 1 year has passed since last update.

DropBoxの同期対象から除外する

Last updated at Posted at 2020-08-19

image05.png

DropBoxは指定したディレクトリ内のデータをクラウドで保管してくれる便利なサービスですが、保存しなくても良いファイルまで保存されると困る場面があります。

標準機能として「選択型同期」機能がありますが、これで指定した除外対象は、同期されませんが、「同期はしたくないけどローカルには保存したい」ということが出来ません。

そこで、下記の方法で動機対象から除外する方法を試みた。

公式

Dropbox ファイルやフォルダを「無視」に設定する
https://help.dropbox.com/ja-jp/files-folders/restore-delete/ignored-files

公式には [dropbox.com と同期しない]をクリックします。 とありますが、Dropbox Plus (これ) にはこの項目がありませんでした。

image01.png

なので、「コマンドラインでファイルやフォルダを「無視」に設定する」項目を元に、スクリプトファイルを作って設定することにしました。

除外の注意

この方法は、拡張ファイル属性を利用したもので、dropbox.com上にアップロードしないというルールを追加するだけでdropbox.comに何かをするものではないようです。

設定したデバイスでのみ働く機能のようなので、複数のデバイスで除外する場合は、そのすべてのデバイスで同じように設定が必要です。

Mac

  1. 下記スクリプトファイルを適当なファイル名(今回はファイル名の例としてdropbox_ignore.sh)を設定して保存。
  2. 保存したら、次のようにchmodで実行権限をもたせる。chmod 777 dropbox_ignore.sh
  3. 実行すると、設置したファイルと同じディレクトリにある、スクリプト内で指定した特定のファイル・ディレクトリがdropboxの同期から除外される。

スクリプト

Mac版とLinux版で同じスクリプトに収めました。Linux版では、attrをインストールする( apt-get install -y attr )必要があるかもしれません。

#/bin/bash
if [ "$(uname)" == 'Darwin' ] || [ "$(expr substr $(uname -s) 1 5)" == 'Linux' ]; then
    cd "$(dirname "$0")"
fi
echo "${PWD}"
# ここに配列で除外する項目を設定する。
# この場合、node_modulesとignore_filesファイルもしくはフォルダが除外される。
ignore_name=("node_modules" "ignore_files")

for file in ${ignore_name[@]}
do
    if [ -e $file ];then
        if [ "$(uname)" == 'Darwin' ]; then
            # Mac
            xattr -w com.dropbox.ignored 1 "${PWD}/${file}"
            echo "--- ${PWD}/${file}  is dropbox ignores ---"
        elif [ "$(expr substr $(uname -s) 1 5)" == 'Linux' ]; then
            # Linux
            attr -s com.dropbox.ignored -V 1 "${PWD}/${file}"
            echo "--- ${PWD}/${file}  is dropbox ignores ---"
        fi
    fi
done
exit 0

Windows

Mac版と基本的には同じ手順だが、こちらはPowerShellで実行させる必要があります。

PowerShell内で実行させるか、実行ファイルとして実行させる場合は.ps1ファイルとして保存して実行させます。ただし、デフォルトではファイルでの実行はポリシーで禁止されているので、実行できるように設定する必要があります。

https://techinfoofmicrosofttech.osscons.jp/index.php?PowerShellのPS1ファイルの作成と実行

スクリプト

# ここに配列で除外する項目を設定する。
# この場合、node_modulesとignore_filesファイルもしくはフォルダが除外される。
$files = @('node_modules','ignore_files');

for($i = 0; $i -lt $files.Count; $i++){
    $path = "$Pwd" + '\' + $files[$i];
    if (Test-Path "$path")
    {
        Write-Host "--- $path  is dropbox ignores ---";
        Set-Content -Path "$path"  -Stream com.dropbox.ignored -Value 1;
    }
} 

実行結果

実行すると、次のようにアイコンが「 - 」のバッチになります。

image02.png

再び同期する方法

対象のファイル・ディレクトリを右クリックしてdropbox.comに同期するを指定すると、再び同期が始まります。

image03.png

image04.png

7
3
2

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
7
3