Linux: 命令行访问 Dropbox, 命令行查看或上传文件到 Dropbox, 命令行调用Dropbox V2 API

 

项目地址:https://github.com/andreafabrizi/Dropbox-Uploader

特征

  • Cross platform
  • Support for the official Dropbox API v2
  • No password required or stored
  • Simple step-by-step configuration wizard
  • Simple and chunked file upload
  • File and recursive directory download
  • File and recursive directory upload
  • Shell wildcard expansion (only for upload)
  • Delete/Move/Rename/Copy/List/Share files
  • Create share link
  • Monitor for changes

在当今这个多设备的环境下,云存储无处不在。无论身处何方,人们都想通过多种设备来从云存储中获取所需的内容。由于拥有漂亮的 UI 和完美的跨平台兼容性,Dropbox 已成为最为广泛使用的云存储服务。 Dropbox 的流行已引发了一系列官方或非官方 Dropbox 客户端的出现,它们支持不同的操作系统平台。

当然 Linux 平台下也有着自己的 Dropbox 客户端: 既有命令行的,也有图形界面客户端。Dropbox Uploader 是一个简单易用的 Dropbox 命令行客户端,它是用 Bash 脚本语言所编写的(LCTT 译注:对,你没看错, 就是 Bash)。在这篇教程中,我将描述 在 Linux 中如何使用 Dropbox Uploader 通过命令行来访问 Dropbox

 

Linux 中安装和配置 Dropbox Uploader

要使用 Dropbox Uploader,你需要下载该脚本并使其可被执行。

$ wget https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh
$ chmod +x dropbox_uploader.sh

请确保你已经在系统中安装了 curl,因为 Dropbox Uploader 通过 curl 来运行 Dropbox 的 API。

否则用下面方式安装curl

# Debian & Ubuntu Linux:
sudo apt-get install bash #(Probably BASH is already installed on your system)
sudo apt-get install curl

# BSD:
cd /usr/ports/shells/bash && make install clean
cd /usr/ports/ftp/curl && make install clean

要配置 Dropbox Uploader,只需运行 dropbox_uploader.sh 即可。当你第一次运行这个脚本时,它将请求得到授权以使得脚本可以访问你的 Dropbox 账户。

$ ./dropbox_uploader.sh
Linux: 命令行访问 Dropbox, 命令行查看或上传文件到 Dropbox, 命令行调用Dropbox V2 API
Linux: 命令行访问 Dropbox, 命令行查看或上传文件到 Dropbox, 命令行调用Dropbox V2 API

 

如上图所指示的那样,你需要通过浏览器访问 https://www.dropbox.com/developers/apps 页面,并创建一个新的 Dropbox app。接着像下图那样填入新 app 的相关信息,并输入 app 的名称,它与 Dropbox Uploader 所生成的 app 名称类似。

Linux: 命令行访问 Dropbox, 命令行查看或上传文件到 Dropbox, 命令行调用Dropbox V2 API
Linux: 命令行访问 Dropbox, 命令行查看或上传文件到 Dropbox, 命令行调用Dropbox V2 API

 

在你创建好一个新的 app 之后,你将在下一个页面看到 app key 和 app secret。请记住它们。

 

Linux: 命令行访问 Dropbox, 命令行查看或上传文件到 Dropbox, 命令行调用Dropbox V2 API
Linux: 命令行访问 Dropbox, 命令行查看或上传文件到 Dropbox, 命令行调用Dropbox V2 API

 

然后在正运行着 dropboxuploader.sh 的终端窗口中输入 app key 和 app secret。然后 dropboxuploader.sh 将产生一个 oAUTH 网址(例如,https://www.dropbox.com/1/oauth/authorize?oauth_token=XXXXXXXXXXXX)。

 

Linux: 命令行访问 Dropbox, 命令行查看或上传文件到 Dropbox, 命令行调用Dropbox V2 API
Linux: 命令行访问 Dropbox, 命令行查看或上传文件到 Dropbox, 命令行调用Dropbox V2 API

 

接着通过浏览器访问那个 oAUTH 网址,并同意访问你的 Dropbox 账户。

 

Linux: 命令行访问 Dropbox, 命令行查看或上传文件到 Dropbox, 命令行调用Dropbox V2 API
Linux: 命令行访问 Dropbox, 命令行查看或上传文件到 Dropbox, 命令行调用Dropbox V2 API

 

这便完成了 Dropbox Uploader 的配置。若要确认 Dropbox Uploader 是否真的被成功地认证了,可以运行下面的命令。

$ ./dropbox_uploader.sh info
Dropbox Uploader v0.12
 > Getting info... 
Name:   Dan Nanni
UID:    XXXXXXXXXX
Email:  my@email_address
Quota:  2048 Mb
Used:   13 Mb
Free:   2034 Mb

 

Dropbox Uploader 示例

要显示根目录中的所有内容,运行:

$ ./dropbox_uploader.sh list

要列出某个特定文件夹中的所有内容,运行:

$ ./dropbox_uploader.sh list Documents/manuals

要上传一个本地文件到一个远程的 Dropbox 文件夹,使用:

$ ./dropbox_uploader.sh upload snort.pdf Documents/manuals

要从 Dropbox 下载一个远程的文件到本地,使用:

$ ./dropbox_uploader.sh download Documents/manuals/mysql.pdf ./mysql.pdf

要从 Dropbox 下载一个完整的远程文件夹到一个本地的文件夹,运行:

$ ./dropbox_uploader.sh download Documents/manuals ./manuals

要在 Dropbox 上创建一个新的远程文件夹,使用:

$ ./dropbox_uploader.sh mkdir Documents/whitepapers

要完全删除 Dropbox 中某个远程的文件夹(包括它所含的所有内容),运行:

$ ./dropbox_uploader.sh delete Documents/manuals

 

How to setup a proxy 设置代理

# Linux:
export HTTP_PROXY_USER=XXXX
export HTTP_PROXY_PASSWORD=YYYY
export https_proxy=http://192.168.0.1:8080

# BSD:
setenv HTTP_PROXY_USER XXXX
setenv HTTP_PROXY_PASSWORD YYYY
setenv https_proxy http://192.168.0.1:8080

 

Dropbox Uploader其他示例

testUnit.sh

#!/bin/bash

DU=./dropbox_uploader.sh

function check_exit
{
    if [ $? -ne 0 ]; then
        echo " Error!!!"
        exit 1
    else
        echo " Passed"
    fi
}

#Creating garbage data
echo -ne " - Creating garbage data...\n"
rm -fr "testData"
mkdir -p "testData"
dd if=/dev/urandom of="testData/file 1.txt" bs=1M count=3
dd if=/dev/urandom of="testData/file 2 ù.txt" bs=1M count=5
mkdir -p "testData/recurse"
dd if=/dev/urandom of="testData/recurse/file 3.txt" bs=1M count=1
dd if=/dev/urandom of="testData/recurse/test_Ü.txt" bs=1M count=1
mkdir -p "testData/recurse/dir 1/"
dd if=/dev/urandom of="testData/recurse/dir 1/file 4.txt" bs=1M count=1
mkdir -p "testData/recurse/dir 1/dir 3/"
dd if=/dev/urandom of="testData/recurse/dir 1/dir 3/file 5.txt" bs=1M count=1
mkdir -p "testData/recurse/dir 2/"

rm -fr recurse

#Rmdir
echo -ne " - Remove remote directory..."
$DU -q remove du_tests
echo ""

#Mkdir
echo -ne " - Make remote directory..."
$DU -q mkdir du_tests
check_exit

#Simple upload
echo -ne " - Simple file upload..."
$DU -q upload "testData/file 1.txt" du_tests
check_exit

#Checking with list
echo -ne " - Checking file..."
$DU -q list du_tests | grep "file 1.txt" > /dev/null
check_exit

#Simple upload 2
echo -ne " - Simple file upload with special chars..."
$DU -q upload testData/file\ 2* du_tests
check_exit

#Checking with list
echo -ne " - Checking file..."
$DU -q list du_tests | grep "file 2 ù.txt" > /dev/null
check_exit

#Recursive directory upload
echo -ne " - Recursive directory upload..."
$DU -q upload testData/recurse du_tests
check_exit

#Recursive directory download
echo -ne " - Recursive directory download..."
$DU -q download du_tests/recurse
check_exit

#Checking the downloaded dir
echo -ne " - Checking the downloaded dir..."
diff -r recurse testData/recurse/
check_exit

#Again, recursive directory download
echo -ne " - Again recursive directory download..."
$DU -q download du_tests/recurse
check_exit

#Again, checking the downloaded dir
echo -ne " - Checking the downloaded dir..."
diff -r recurse testData/recurse/
check_exit

rm -fr "recurse"
rm -fr "testData"

#Rmdir
echo -ne " - Remove remote directory..."
$DU -q remove du_tests
check_exit

 

更多参考: PHP: 操作 Dropbox, 查看,下载,上传,删除等

 

本文:Linux: 命令行访问 Dropbox, 命令行查看或上传文件到 Dropbox, 命令行调用Dropbox V2 API

Loading

One Comment

Add a Comment

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.