vanhofen
6 years ago
4 changed files with 2 additions and 1823 deletions
@ -1,423 +0,0 @@ |
|||
#!/usr/bin/env bash |
|||
# |
|||
# DropShell |
|||
# |
|||
# Copyright (C) 2013-2014 Andrea Fabrizi <andrea.fabrizi@gmail.com> |
|||
# |
|||
# This program is free software; you can redistribute it and/or modify |
|||
# it under the terms of the GNU General Public License as published by |
|||
# the Free Software Foundation; either version 2 of the License, or |
|||
# (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU General Public License |
|||
# along with this program; if not, write to the Free Software |
|||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|||
# |
|||
|
|||
#Looking for dropbox uploader |
|||
if [ -f "./dropbox_uploader.sh" ]; then |
|||
DU="./dropbox_uploader.sh" |
|||
else |
|||
DU=$(which dropbox_uploader.sh) |
|||
if [ $? -ne 0 ]; then |
|||
echo "Dropbox Uploader not found!" |
|||
exit 1 |
|||
fi |
|||
fi |
|||
|
|||
#For MacOSX, install coreutils (which includes greadlink) |
|||
# $brew install coreutils |
|||
if [ "${OSTYPE:0:6}" == "darwin" ]; then |
|||
READLINK="greadlink" |
|||
else |
|||
READLINK="readlink" |
|||
fi |
|||
|
|||
SHELL_HISTORY=~/.dropshell_history |
|||
DU_OPT="-q" |
|||
BIN_DEPS="id $READLINK ls basename ls pwd cut" |
|||
VERSION="0.2" |
|||
|
|||
umask 077 |
|||
|
|||
#Dependencies check |
|||
for i in $BIN_DEPS; do |
|||
which $i > /dev/null |
|||
if [ $? -ne 0 ]; then |
|||
echo -e "Error: Required program could not be found: $i" |
|||
exit 1 |
|||
fi |
|||
done |
|||
|
|||
#Check DropBox Uploader |
|||
if [ ! -f "$DU" ]; then |
|||
echo "Dropbox Uploader not found: $DU" |
|||
echo "Please change the 'DU' variable according to the Dropbox Uploader location." |
|||
exit 1 |
|||
else |
|||
DU=$($READLINK -m "$DU") |
|||
fi |
|||
|
|||
#Returns the current user |
|||
function get_current_user |
|||
{ |
|||
id -nu |
|||
} |
|||
|
|||
function normalize_path |
|||
{ |
|||
$READLINK -m "$1" |
|||
} |
|||
|
|||
################ |
|||
#### START #### |
|||
################ |
|||
|
|||
echo -e "DropShell v$VERSION" |
|||
echo -e "The Interactive Dropbox SHELL" |
|||
echo -e "Andrea Fabrizi - andrea.fabrizi@gmail.com\n" |
|||
echo -e "Type help for the list of the available commands.\n" |
|||
|
|||
history -r "$SHELL_HISTORY" |
|||
username=$(get_current_user) |
|||
|
|||
#Initial Working Directory |
|||
CWD="/" |
|||
|
|||
function sh_ls |
|||
{ |
|||
local arg1=$1 |
|||
|
|||
#Listing current dir |
|||
if [ -z "$arg1" ]; then |
|||
$DU $DU_OPT list "$CWD" |
|||
|
|||
#Listing $arg1 |
|||
else |
|||
|
|||
#Relative or absolute path? |
|||
if [ ${arg1:0:1} == "/" ]; then |
|||
$DU $DU_OPT list "$(normalize_path "$arg1")" |
|||
else |
|||
$DU $DU_OPT list "$(normalize_path "$CWD/$arg1")" |
|||
fi |
|||
|
|||
#Checking for errors |
|||
if [ $? -ne 0 ]; then |
|||
echo -e "ls: cannot access '$arg1': No such file or directory" |
|||
fi |
|||
fi |
|||
} |
|||
|
|||
function sh_cd |
|||
{ |
|||
local arg1=$1 |
|||
|
|||
OLD_CWD=$CWD |
|||
|
|||
if [ -z "$arg1" ]; then |
|||
CWD="/" |
|||
elif [ ${arg1:0:1} == "/" ]; then |
|||
CWD=$arg1 |
|||
else |
|||
CWD=$(normalize_path "$OLD_CWD/$arg1/") |
|||
fi |
|||
|
|||
$DU $DU_OPT list "$CWD" > /dev/null |
|||
|
|||
#Checking for errors |
|||
if [ $? -ne 0 ]; then |
|||
echo -e "cd: $arg1: No such file or directory" |
|||
CWD=$OLD_CWD |
|||
fi |
|||
} |
|||
|
|||
function sh_get |
|||
{ |
|||
local arg1=$1 |
|||
local arg2=$2 |
|||
|
|||
if [ ! -z "$arg1" ]; then |
|||
|
|||
#Relative or absolute path? |
|||
if [ ${arg1:0:1} == "/" ]; then |
|||
$DU $DU_OPT download "$(normalize_path "$arg1")" "$arg2" |
|||
else |
|||
$DU $DU_OPT download "$(normalize_path "$CWD/$arg1")" "$arg2" |
|||
fi |
|||
|
|||
#Checking for errors |
|||
if [ $? -ne 0 ]; then |
|||
echo -e "get: Download error" |
|||
fi |
|||
|
|||
#args error |
|||
else |
|||
echo -e "get: missing operand" |
|||
echo -e "syntax: get <FILE/DIR> [LOCAL_FILE/DIR]" |
|||
fi |
|||
} |
|||
|
|||
function sh_put |
|||
{ |
|||
local arg1=$1 |
|||
local arg2=$2 |
|||
|
|||
if [ ! -z "$arg1" ]; then |
|||
|
|||
#Relative or absolute path? |
|||
if [ "${arg2:0:1}" == "/" ]; then |
|||
$DU $DU_OPT upload "$arg1" "$(normalize_path "$arg2")" |
|||
else |
|||
$DU $DU_OPT upload "$arg1" "$(normalize_path "$CWD/$arg2")" |
|||
fi |
|||
|
|||
#Checking for errors |
|||
if [ $? -ne 0 ]; then |
|||
echo -e "put: Upload error" |
|||
fi |
|||
|
|||
#args error |
|||
else |
|||
echo -e "put: missing operand" |
|||
echo -e "syntax: put <FILE/DIR> <REMOTE_FILE/DIR>" |
|||
fi |
|||
} |
|||
|
|||
function sh_rm |
|||
{ |
|||
local arg1=$1 |
|||
|
|||
if [ ! -z "$arg1" ]; then |
|||
|
|||
#Relative or absolute path? |
|||
if [ ${arg1:0:1} == "/" ]; then |
|||
$DU $DU_OPT remove "$(normalize_path "$arg1")" |
|||
else |
|||
$DU $DU_OPT remove "$(normalize_path "$CWD/$arg1")" |
|||
fi |
|||
|
|||
#Checking for errors |
|||
if [ $? -ne 0 ]; then |
|||
echo -e "rm: cannot remove '$arg1'" |
|||
fi |
|||
|
|||
#args error |
|||
else |
|||
echo -e "rm: missing operand" |
|||
echo -e "syntax: rm <FILE/DIR>" |
|||
fi |
|||
} |
|||
|
|||
function sh_mkdir |
|||
{ |
|||
local arg1=$1 |
|||
|
|||
if [ ! -z "$arg1" ]; then |
|||
|
|||
#Relative or absolute path? |
|||
if [ ${arg1:0:1} == "/" ]; then |
|||
$DU $DU_OPT mkdir "$(normalize_path "$arg1")" |
|||
else |
|||
$DU $DU_OPT mkdir "$(normalize_path "$CWD/$arg1")" |
|||
fi |
|||
|
|||
#Checking for errors |
|||
if [ $? -ne 0 ]; then |
|||
echo -e "mkdir: cannot create directory '$arg1'" |
|||
fi |
|||
|
|||
#args error |
|||
else |
|||
echo -e "mkdir: missing operand" |
|||
echo -e "syntax: mkdir <DIR_NAME>" |
|||
fi |
|||
} |
|||
|
|||
function sh_mv |
|||
{ |
|||
local arg1=$1 |
|||
local arg2=$2 |
|||
|
|||
if [ ! -z "$arg1" -a ! -z "$arg2" ]; then |
|||
|
|||
#SRC relative or absolute path? |
|||
if [ ${arg1:0:1} == "/" ]; then |
|||
SRC="$arg1" |
|||
else |
|||
SRC="$CWD/$arg1" |
|||
fi |
|||
|
|||
#DST relative or absolute path? |
|||
if [ ${arg2:0:1} == "/" ]; then |
|||
DST="$arg2" |
|||
else |
|||
DST="$CWD/$arg2" |
|||
fi |
|||
|
|||
$DU $DU_OPT move "$(normalize_path "$SRC")" "$(normalize_path "$DST")" |
|||
|
|||
#Checking for errors |
|||
if [ $? -ne 0 ]; then |
|||
echo -e "mv: cannot move '$arg1' to '$arg2'" |
|||
fi |
|||
|
|||
#args error |
|||
else |
|||
echo -e "mv: missing operand" |
|||
echo -e "syntax: mv <FILE/DIR> <DEST_FILE/DIR>" |
|||
fi |
|||
} |
|||
|
|||
function sh_cp |
|||
{ |
|||
local arg1=$1 |
|||
local arg2=$2 |
|||
|
|||
if [ ! -z "$arg1" -a ! -z "$arg2" ]; then |
|||
|
|||
#SRC relative or absolute path? |
|||
if [ ${arg1:0:1} == "/" ]; then |
|||
SRC="$arg1" |
|||
else |
|||
SRC="$CWD/$arg1" |
|||
fi |
|||
|
|||
#DST relative or absolute path? |
|||
if [ ${arg2:0:1} == "/" ]; then |
|||
DST="$arg2" |
|||
else |
|||
DST="$CWD/$arg2" |
|||
fi |
|||
|
|||
$DU $DU_OPT copy "$(normalize_path "$SRC")" "$(normalize_path "$DST")" |
|||
|
|||
#Checking for errors |
|||
if [ $? -ne 0 ]; then |
|||
echo -e "cp: cannot copy '$arg1' to '$arg2'" |
|||
fi |
|||
|
|||
#args error |
|||
else |
|||
echo -e "cp: missing operand" |
|||
echo -e "syntax: cp <FILE/DIR> <DEST_FILE/DIR>" |
|||
fi |
|||
} |
|||
|
|||
function sh_free |
|||
{ |
|||
$DU $DU_OPT info | grep "Free:" | cut -f 2 |
|||
} |
|||
|
|||
function sh_cat |
|||
{ |
|||
local arg1=$1 |
|||
|
|||
if [ ! -z "$arg1" ]; then |
|||
|
|||
tmp_cat="/tmp/sh_cat_$RANDOM" |
|||
sh_get "$arg1" "$tmp_cat" |
|||
cat "$tmp_cat" |
|||
rm -fr "$tmp_cat" |
|||
|
|||
#args error |
|||
else |
|||
echo -e "cat: missing operand" |
|||
echo -e "syntax: cat <FILE>" |
|||
fi |
|||
} |
|||
|
|||
while (true); do |
|||
|
|||
#Reading command from shell |
|||
read -e -p "$username@Dropbox:$CWD$ " input |
|||
|
|||
#Tokenizing command |
|||
eval tokens=($input) |
|||
cmd=${tokens[0]} |
|||
arg1=${tokens[1]} |
|||
arg2=${tokens[2]} |
|||
|
|||
#Saving command in the history file |
|||
history -s "$input" |
|||
history -w "$SHELL_HISTORY" |
|||
|
|||
case $cmd in |
|||
|
|||
ls) |
|||
sh_ls "$arg1" |
|||
;; |
|||
|
|||
cd) |
|||
sh_cd "$arg1" |
|||
;; |
|||
|
|||
pwd) |
|||
echo $CWD |
|||
;; |
|||
|
|||
get) |
|||
sh_get "$arg1" "$arg2" |
|||
;; |
|||
|
|||
put) |
|||
sh_put "$arg1" "$arg2" |
|||
;; |
|||
|
|||
rm) |
|||
sh_rm "$arg1" |
|||
;; |
|||
|
|||
mkdir) |
|||
sh_mkdir "$arg1" |
|||
;; |
|||
|
|||
mv) |
|||
sh_mv "$arg1" "$arg2" |
|||
;; |
|||
|
|||
cp) |
|||
sh_cp "$arg1" "$arg2" |
|||
;; |
|||
|
|||
cat) |
|||
sh_cat "$arg1" |
|||
;; |
|||
|
|||
free) |
|||
sh_free |
|||
;; |
|||
|
|||
lls) |
|||
ls -l |
|||
;; |
|||
|
|||
lpwd) |
|||
pwd |
|||
;; |
|||
|
|||
lcd) |
|||
cd "$arg1" |
|||
;; |
|||
|
|||
help) |
|||
echo -e "Supported commands: ls, cd, pwd, get, put, cat, rm, mkdir, mv, cp, free, lls, lpwd, lcd, help, exit\n" |
|||
;; |
|||
|
|||
quit|exit) |
|||
exit 0 |
|||
;; |
|||
|
|||
*) |
|||
if [ ! -z "$cmd" ]; then |
|||
echo -ne "Unknown command: $cmd\n" |
|||
fi |
|||
;; |
|||
esac |
|||
done |
|||
|
File diff suppressed because it is too large
Loading…
Reference in new issue