Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Ignore node_modules/bower_components folders in your Dropbox

This script scans your Dropbox (or any given folder) for folders stored in the ignore array and excludes them from syncing. Makes use of the official Dropbox CLI

I'm a beginner at bash, so all improvements are welcome!

#!/bin/bash

set -e

# SETTINGS
# ========
# Location of your Dropbox folder
dropbox_folder="/Users/YOUR_NAME/Dropbox"
# Location of dropbox.py (http://www.dropboxwiki.com/tips-and-tricks/using-the-official-dropbox-command-line-interface-cli)
dropbox_script="~/bin/dropbox.py"
# Array of folders to ignore
ignore_list=['bower_components','node_modules','vendor']

# FUNCTIONS
# =========
function dropbox_install(){
    while true; do
        read -p $'\nDo you want to use download and install dropbox.py? (y/n) ' yn
        case $yn in
            [Yy]* )
                dropbox_script_parent=$(dirname $dropbox_script)
                mkdir -p $dropbox_script_parent
                wget -O $dropbox_script "https://www.dropbox.com/download?dl=packages/dropbox.py"
                chmod +x $dropbox_script
                recurse $dropbox
                break;;
            [Nn]* )
                echo 'Aborted. See http://www.dropboxwiki.com/tips-and-tricks/using-the-official-dropbox-command-line-interface-cli#Installation for manual instructions.';
                exit 1;;
        esac
    done
}

function recurse() {
 for i in "$1"/*;do
    if [ -d "$i" ];then
        j=$(basename "$i")
        if [[ " ${ignore_list[*]} " == *$j* ]]; then
            $dropbox_script exclude "$i"
        fi
        recurse "$i"
    fi
 done
}

# SCRIPT
# ======
# Check Dropbox folder location
if [ -d "$dropbox_folder" ];then
    echo "Dropbox found at $dropbox_folder"
else
    echo "Dropbox not found"
    exit 1
fi

# Check for dropbox.py
if [ -e "$dropbox_script" ];then
    recurse $dropbox
else
    dropbox_install
fi
@AdsonCicilioti

This comment has been minimized.

Show comment
Hide comment
@AdsonCicilioti

AdsonCicilioti May 15, 2015

In my dev returning this:

/home/adson/bin/dropbox.py:1168: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
  elif len(args) == 1 and args[0] == u"list":
ignores/excludes a directory from syncing
dropbox exclude [list]
dropbox exclude add [DIRECTORY] [DIRECTORY] ...
dropbox exclude remove [DIRECTORY] [DIRECTORY] ...

"list" prints a list of directories currently excluded from syncing.
"add" adds one or more directories to the exclusion list, then resynchronizes Dropbox.
"remove" removes one or more directories from the exclusion list, then resynchronizes Dropbox.
With no arguments, executes "list".
Any specified path must be within Dropbox.

In my dev returning this:

/home/adson/bin/dropbox.py:1168: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
  elif len(args) == 1 and args[0] == u"list":
ignores/excludes a directory from syncing
dropbox exclude [list]
dropbox exclude add [DIRECTORY] [DIRECTORY] ...
dropbox exclude remove [DIRECTORY] [DIRECTORY] ...

"list" prints a list of directories currently excluded from syncing.
"add" adds one or more directories to the exclusion list, then resynchronizes Dropbox.
"remove" removes one or more directories from the exclusion list, then resynchronizes Dropbox.
With no arguments, executes "list".
Any specified path must be within Dropbox.
@vvo

This comment has been minimized.

Show comment
Hide comment
@vvo

vvo Jun 6, 2015

I have a one liner for you @idleberg.

find `pwd` -type d -regex ".*\(node_modules\|temp\|tmp\|bower_components\|cache\)$" -prune -exec dropbox-cli exclude add {} \;

done!

vvo commented Jun 6, 2015

I have a one liner for you @idleberg.

find `pwd` -type d -regex ".*\(node_modules\|temp\|tmp\|bower_components\|cache\)$" -prune -exec dropbox-cli exclude add {} \;

done!

@AdsonCicilioti

This comment has been minimized.

Show comment
Hide comment
@AdsonCicilioti

AdsonCicilioti Aug 31, 2015

@vvo, this line overwriting the @idleberg script? How use?

@vvo, this line overwriting the @idleberg script? How use?

@KingScooty

This comment has been minimized.

Show comment
Hide comment
@KingScooty

KingScooty Dec 12, 2015

@vvo Is your script a complete replacement for @idleberg's?

@vvo Is your script a complete replacement for @idleberg's?

@backspaces

This comment has been minimized.

Show comment
Hide comment
@backspaces

backspaces May 3, 2016

What's the current state of affairs here? Is the one-liner a solution? If so, how? And is this linux-only? I've heard so but I bet it works on OSX too, also unix based.

Otherwise, is there a script that does work?

Or is DBox just not useful in certain use cases? For me, its mainly my src files which include node_modules. I'd prefer to not have dropbox sync node_modules.

backspaces commented May 3, 2016

What's the current state of affairs here? Is the one-liner a solution? If so, how? And is this linux-only? I've heard so but I bet it works on OSX too, also unix based.

Otherwise, is there a script that does work?

Or is DBox just not useful in certain use cases? For me, its mainly my src files which include node_modules. I'd prefer to not have dropbox sync node_modules.

@clavearnel

This comment has been minimized.

Show comment
Hide comment
@clavearnel

clavearnel Jul 22, 2016

add "add" to the recursive function to work

function recurse() { for i in "$1"/*;do if [ -d "$i" ];then j=$(basename "$i") if [[ " ${ignore_list[*]} " == *$j* ]]; then $dropbox_script exclude add "$i" fi recurse "$i" fi done }

add "add" to the recursive function to work

function recurse() { for i in "$1"/*;do if [ -d "$i" ];then j=$(basename "$i") if [[ " ${ignore_list[*]} " == *$j* ]]; then $dropbox_script exclude add "$i" fi recurse "$i" fi done }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment