linux百度雲工具baidu pcs
阿新 • • 發佈:2019-01-08
C/C++寫的一個百度網盤工具,可以在linux終端中使用。 這是通過分析網盤網站得到的直接介面,不需要建立應用。
- 支援多執行緒下載和下載時斷點續傳。
- 支援快速上傳和多執行緒分片上傳。
- 支援執行緒限速。具體檢視'pcs set'和'pcs context'命令的說明。
- 支援AES-CBC-128, AES-CBC-192, AES-CBC-256加密。
編譯 (Debian):
程式依賴於 libcurl。
1. 安裝依賴
apt-get install build-essential libcurl4-openssl-dev libssl-dev
2. 獲取原始碼
git clone https://github.com/GangZhuo/BaiduPCS.git
3. 編譯原始碼
cd BaiduPCS
make clean
make
make install #將安裝到/usr/local/bin下
4. 手動安裝到其他目錄,例如 /usr/bin 下
cp ./bin/pcs
/usr/bin/
命令列表:
如果出現中文亂碼,請檢查作業系統的當前編碼是否為UTF-8。 命令中涉及到的網盤檔案路徑,可以是絕對路徑,也可以是相對於當前工作目錄的相對路徑。 例: /data/data.txt 即是網盤絕對路徑,表示網盤根目錄下的data目錄中的data.txt檔案。 data.txt 即是相對路徑,表示當前工作目錄下的data.txt檔案。 當前工作目錄可通過 'pcs pwd' 命令來檢視,當前工作目錄可通過 'pcs cd'命令切換。 可通過 'pcs help' 檢視支援的子命令;可在子命令後加 '-h' 檢視子命令幫助, 也可呼叫類似於 'pcs help <command>' 的命令來檢視子命令的幫助。 例如: pcs move -h。 pcs help move 此命令等價於上一行的命令
直接顯示網盤中文字檔案內容
pcs cat <file>
示例:
pcs cat note.txt
pcs cat /my/todo.txt
切換工作目錄
pcs cd <dir>
示例:
pcs cd pcs
pcs cd /backup/20140618
複製網盤檔案或目錄
pcs copy <old path> <new path>
示例:
pcs copy data.txt data_20140118.txt
比較異同
pcs compare [-cderu] <local path> <remote path> 比較本地檔案和遠端檔案、本地目錄和遠端目錄的異同。 預設選項是'-cdu',即打印出需要上傳的檔案、 需要下載的檔案和無法確定上傳下載的檔案。 比較規則: 只通過時間來進行比較。 I) 如果本地和遠端都是檔案: a) 本地最後修改時間大於網盤檔案上傳時間,則認為需要上傳; b) 本地最後修改時間小於網盤檔案上傳時間,則認為需要下載; (此處注意:當一個檔案上傳到網盤後,其網盤時間肯定比本地最後修改時間大。 如果此時執行比較的話,則會認為該檔案需要從網盤下載。 下載則沒有此問題,因為一個檔案下載後,程式會使用 網盤時間來更新本地檔案的最後修改時間。) II) 本地存在,網盤不存在,則認為需要上傳 III) 本地不存在,網盤存在,則認為需要下載 IV) 如果一端是檔案,另一端是目錄,則認為無法確認是上傳還是下載。 選項: -c 只打印出無法確定上傳或下載的項。 一般是因為本地是檔案,遠端是目錄,或本地是目錄遠端是檔案 -d 只打印出需要下載的檔案或目錄 -e 只打印相同的檔案或目錄 -r 遞迴比較其子目錄 -u 只打印出需要上傳的檔案或目錄 示例: pcs compare music music pcs compare -r ~/music music
顯示當前上下文
pcs context
上下文包括:
當前使用的Cookie檔案、驗證碼圖片儲存路徑、
當前的工作目錄、列出目錄時分頁大小、列出目錄時的排序欄位、
列出目錄時的排序方向、啟用的加密方法、加密金鑰、是否啟用加密
程式開啟時會自動讀取上下文檔案;結束時,會自動儲存上下文到檔案。
可通過'PCS_CONTEXT'環境變數指定上下文檔案路徑。程式判斷規則是:
1) 如果通過'--context'選項指定了上下文檔案,則使用它;
2) 如果未通過'--context'指定,但是指定了環境變數'PCS_CONTEXT'則使用它;
3) 如果也未指定環境變數'PCS_CONTEXT'則使用'~/.pcs/pcs.context'
上下文為JSON格式的檔案:
{
"cookiefile": "/home/gang/.pcs/default.cookie", /*指定Cookie檔案*/
"captchafile": "/home/gang/.pcs/captcha.gif", /*指定驗證碼圖片儲存路徑*/
"workdir": "/", /*指定當前的網盤工作目錄*/
"list_page_size": 20, /*指定列出目錄時分頁大小*/
"list_sort_name": "name", /*指定列出目錄時排序欄位*/
"list_sort_direction": "asc", /*指定列出目錄時的排序方向*/
"secure_method": "aes-cbc-128", /*指定上傳時的加密方式*/
"secure_key": "12345678", /*指定上傳時的加密金鑰,*/
/*下載時如檢測到檔案被加密,也使用此金鑰解密*/
"secure_enable": true, /*指定是否啟用加密解密*/
/*如果設定為false,*/
/*下載時即使檢查到檔案加密,也不會解密*/
"timeout_retry": true, /*當執行'synch'和'compare'命令時,
因為頻繁呼叫api去獲取目錄下檔名稱
將導致一些api呼叫超時,此選項用於控制超時時
是否重試。*/
"max_thread": 5, /*下載時允許的最大執行緒數*/
"max_speed_per_thread": 0 /*設定的是單個執行緒的最大下載速度。0表示不限速。
單位為KiB。例,如果設定為100,共有5執行緒,
則總的最大下載速度將在500KiB/s上下浮動。*/
"max_upload_speed_per_thread": 0 /*設定的是單個執行緒的最大上傳速度。0表示不限速。
單位為KiB。例,如果設定為100,共有5執行緒,
則總的最大上傳速度將在500KiB/s上下浮動。*/
}
下載檔案
pcs download [-f] <remote file> <local file>
pcs d [-f] <remote file> <local file>
只能下載檔案,如果需要下載目錄,請使用 'pcs synch -d <local dir> <remote dir>'。
選項:
-f 如果本地檔案存在的話,強制替換
示例:
pcs download /backup/data.20140118.tar.gz ~/download/data.20140118.tar.gz
直接儲存文字到網盤中
pcs echo [-a] <remote file> <text>
選項:
-a 指定把文字新增到檔案末尾,而不是完全替換
示例:
pcs echo data.txt "The text that saved by pcs."
編碼/解碼本地檔案
pcs encode [-def] <src> <dst>
選項:
-d 使用上下文中的金鑰來解密<src>檔案並輸出結果到<dst>中。
程式會讀取<src>檔案並檢測其加密方法。
-e 使用上下文中的金鑰和加密方法來加密<src>檔案並輸出結果到<dst>中。
-f 強制覆蓋<dst>檔案。
示例:
pcs encode -e data.txt data-sec.txt
pcs encode -d data-sec.txt data-plain.txt
pcs encode -h
檢視幫助
pcs help [command name]
檢視幫助。
示例:
pcs help
pcs help compare
pcs help -h
列出網盤根目錄下的檔案或目錄
pcs list [dir]
pcs ls [dir]
輸出格式為:
* 第一列指示是否是目錄,如果是目錄則輸出 d,否則輸出 -
* 第二列是檔案或目錄的最後修改時間
* 第三列是檔案路徑
示例:
pcs list
pcs list /music
pcs list -h
列出目錄時會自動分頁顯示,如果需要修改分頁大小的話,
使用'pcs set --list_page_size=20'來修改,把list_page_size設定為0,則關閉分頁。
登入網盤
pcs login [--username=<username>] [--password=<password>]
登入可能需要輸入驗證碼。目前的處理辦法是把驗證碼圖片寫入到本地檔案,使用者開啟檔案識別驗證碼。
可通過 'pcs set --captcha_file=<path> 來指定驗證碼儲存路徑,
例如:'pcs set --captcha_file=/var/www/xxx.com/captch.gif'將檔案儲存到網站目錄下。
可通過 'pcs context' 檢視當前的執行上下文。執行上下文包括驗證碼圖片儲存路徑等其他資訊。
示例:
pcs login -h 可檢視login命令的使用方法
pcs login 會提示輸入使用者名稱和密碼
pcs login --username=gang 指定使用者名稱登入
pcs login --username=gang --password=123456 指定使用者名稱和密碼登入
退出網盤
pcs logout
顯示網盤檔案或目錄的元資料
pcs meta <file>
示例:
pcs meta
pcs meta note.txt
建立目錄
pcs mkdir <dir>
示例:
pcs mkdir subdir
pcs mkdir /music/china
移動網盤檔案或目錄
pcs move <src> <dst>
pcs mv <src> <dst>
示例:
pcs move /data_20140118.txt /subdir/data.txt
pcs move music /my/music
顯示當前網盤的工作目錄
pcs pwd
示例:
pcs pwd
顯示網盤配額
pcs quota [-e]
選項:
-e 列印精確的網盤配額
示例:
pcs quota
pcs quota -e
刪除檔案或目錄
pcs remove <path>
pcs rm <path>
示例:
pcs remove /subdir/data_20140118.txt
重新命名網盤檔案或目錄
pcs rename <src> <new name>
pcs ren <src> <new name>
注意:<new name>是新的檔名字,而不是檔案路徑。如果需要移動檔案到另一個目錄,請使用 'pcs move'。
示例:
pcs rename /data.txt data_20140118.txt
設定上下文
pcs set [--captcha_file=<path>] [--cookie_file=<path>] ...
選項:
--captcha_file=<file path> 設定驗證碼圖片儲存路徑
--cookie_file=<file path> 設定cookie檔案路徑
--list_page_size=<page size> 設定列出目錄時分頁大小
--list_sort_direction=[asc|desc] 設定列出目錄時排序方向
--list_sort_name=[name|time|size] 設定列出目錄時排序欄位
--secure_enable=[true|false] 設定上傳下載時是否啟用加密
--secure_key=<key string> 設定加密解密金鑰
--secure_method=[plaintext|aes-cbc-128|aes-cbc-192|aes-cbc-256] 設定加密方式
--timeout_retry=[true|false] 設定執行synch和compare時,獲取目錄下檔案超時時,是否允許重試
--max_thread=<num> 設定下載時允許的最大執行緒數
--max_speed_per_thread=<num> 設定單執行緒的最大下載速度。單位為KiB。詳細檢視'pcs context'命令中對上下文檔案的說明
--max_upload_speed_per_thread=<num>設定單執行緒的最大上傳速度。單位為KiB。詳細檢視'pcs context'命令中對上下文檔案的說明
示例:
pcs set -h
pcs set --cookie_file="/tmp/pcs.cookie"
pcs set --captcha_file="/tmp/vc.git"
pcs set --list_page_size=20 --list_sort_name=name --list_sort_direction=desc
pcs set --secure_enable=true --secure_key=123456 --secure_method=aes-cbc-256
搜尋檔案
pcs search [-r] [dir] <key>
示例:
pcs search note.txt 在當前工作目錄搜尋 note.txt
pcs search /music desc.mp3 在/music目錄搜尋 desc.mp3
pcs search -r note.txt 在當前工作目錄遞迴搜尋 note.txt
pcs search -r /music desc.mp3 在/music目錄遞迴搜尋 desc.mp3
同步目錄
pcs synch [-cdenru] <local path> <remote path>
pcs s [-cdenru] <local path> <remote path>
同步本地檔案和遠端檔案、本地目錄和遠端目錄。
預設選項是'-cdu',即上傳需要上傳的檔案、下載需要下載的檔案和列印無法確定上傳下載的檔案。
比較規則:(同'compare'一樣)
只通過時間來進行比較。
I) 如果本地和遠端都是檔案:
a) 本地最後修改時間大於網盤檔案上傳時間,則認為需要上傳;
b) 本地最後修改時間小於網盤檔案上傳時間,則認為需要下載;
(此處注意:當一個檔案上傳到網盤後,其網盤時間肯定比本地最後修改時間大。
如果此時執行比較的話,則會認為該檔案需要從網盤下載。
下載則沒有此問題,因為一個檔案下載後,程式會使用
網盤時間來更新本地檔案的最後修改時間。)
II) 本地存在,網盤不存在,則認為需要上傳
III) 本地不存在,網盤存在,則認為需要下載
IV) 如果一端是檔案,另一端是目錄,則認為無法確認是上傳還是下載。
選項:
-c 只打印出無法確定上傳或下載的項。
一般是因為本地是檔案,遠端是目錄,或本地是目錄遠端是檔案
-d 只下載需要下載的檔案或目錄
-e 只打印相同的檔案或目錄
-n 只是列印,而不真正的執行上傳和下載,等價於'compare'
-r 遞迴比較其子目錄
-u 只上傳需要上傳的檔案或目錄
示例:
pcs synch music music
pcs synch -r ~/music music
pcs synch -u music music 只上傳需要上傳的檔案,等價於備份
pcs synch -d music music 只下載需要下載的檔案,等價於還原
pcs synch -du music music 上傳需要上傳的檔案,並且下載需要下載的檔案,等價於同步
注意:推薦每次都帶上'-c'選項,可以打印出不知道如何處理的檔案或目錄,防止漏上傳或下載。
上傳檔案
pcs upload [-f] <local file> <remote file>
pcs u [-f] <local file> <remote file>
只能上傳檔案,如果需要上傳目錄,請使用 'pcs synch' 命令。
示例:
pcs upload ~/data.tar.gz /backup/data.20140118.tar.gz
顯示程式版本
pcs version
示例:
pcs version
顯示當前登入使用者
pcs who
示例:
pcs who
注意:
1. 程式碼比較亂,以後空的時候重構。
2. 啟用加密後,分片上傳邏輯未仔細測試。
問題:
1. 上傳大檔案時,程式會計算檔案的MD5值,此過程耗時較久。
2. 下載大檔案時,程式會在磁碟上預分配檔案空間,此過程耗時較久。
3. 上傳大檔案後,通過 'pcs meta'獲取到的md5值與本地檔案計算出的md5不匹配,這個應是百度網盤的bug。(測試時,把上傳的檔案下載到本地後,對比md5值是匹配的)