Rclone是一款極為強大的命令列工具,主要用於不同雲端儲存服務之間的檔案同步、備份和遷移。它支援眾多雲端儲存提供商,如 Google Drive、OneDrive、Dropbox 等。
本文將詳細介紹 Rclone 的安裝與設定,展示其常用命令(如copy、move、sync等)以及各種參數(如include和exclude等),並闡述filter的編寫方式。文中所有內容均可在 Rclone 官網找到,這裡主要是進行了相關整理,為大家提供一種“快速”的參考方式。
1. 物件儲存服務是什麼
在使用 Rclone 之前,我們需要了解物件儲存服務的概念。物件儲存是一種用於儲存大量非結構化資料的儲存方式。Rclone 支援大部分的物件儲存服務,國外的有 Google、MS、Amazon 等,國內的包括阿里雲、百度雲、騰訊雲、火山雲等。詳細列表可參考這裡。
在此,特別推薦賽博菩薩cloudflare和 oracle cloud。
除了公共物件儲存之外,自建物件儲存如 MinIO,Rclone 也是支援的。可參考這篇教程,在本地搭建一個 MinIO 的物件儲存。
2. 安裝 Rclone
Rclone 有多種安裝方式,任選其一即可。
2.1. 包管理器直接安裝
sudo dnf install rclone # RedHat
sudo apt install rclone # Ubuntu
brew install rclone # MacOS
2.2. 統一指令碼安裝
sudo -v ; curl https://rclone.org/install.sh | sudo bash
安裝 beta 版本:
sudo -v ; curl https://rclone.org/install.sh | sudo bash -s beta
2.3. 手動下載安裝包安裝
curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip
cd rclone-*-linux-amd64
3. 設定 Rclone
有兩種設定方式,一種是使用rclone config進行設定,另一種是直接修改~/.config/rclone/rclone.conf檔案。實際上,第一種方式最終也是修改設定檔。常見的設定檔如下:
[aoi]
type = s3
access_key_id = xxxx
secret_access_key = yyyy
endpoint = http://oss.aoi.ai
其中,access_key_id和secret_access_key來自雲服務商,endpoint則是地址。使用者可以自行設定的部分是名稱。在後續的執行中,遠端地址就是aoi:xxxx,其中xxxx是 bucket 的名字。Rclone 的操作物件也可以全部是本地檔案系統。
3.1. 設定 cloudflare 的 R2 儲存
賽博菩薩 cloudflare 提供免費的物件儲存。後續會專門撰寫一篇文章介紹具體操作過程。
4. Rclone 命令
下面介紹 Rclone 常用的命令。
4.1. 檢視 ls lsl lsd lsf lsjson
ls:僅列出物件的大小和路徑。lsl:列出物件的修改時間、大小和路徑。lsd:僅列出目錄。lsf:以易於解析的格式列出物件和目錄。lsjson:以 JSON 格式列出物件和目錄。
ls、lsl、lsd這幾個命令的結果是人類可讀的。而lsf的結果是人類和機器都可讀的,lsjson被設計為機器可讀,從名字就可以看出其輸出為 JSON 格式。ls和lsf預設是遞迴的,可以新增--max-depth 1設定遞迴程度。其他的lsd、lsf、lsjson預設不是遞迴的,新增-R可實現遞迴。
Rclone 的速度非常快,在 Python 中使用subprocess時,比 Python 中的 s3 庫快很多。
4.2. 同步 sync
這是 Rclone 最重要的功能。它將源目錄中的檔案同步到目標目錄。如果目標目錄中存在與源目錄相同的檔案,Rclone 會根據檔案的修改時間來決定是否覆蓋目標檔案。如果原始檔比目標檔案新,或者目標檔案不存在,Rclone 會將原始檔複製到目標目錄。如果目標檔案比原始檔新,Rclone 會根據設定決定是否覆蓋原始檔。
rclone sync source: destination: [options]
例如:
rclone sync local_folder:remote_drive:backup_folder --exclude "*.tmp"
將本地資料夾local_folder中的檔案同步到遠端驅動器remote_drive下的backup_folder中,同時排除所有以.tmp結尾的檔案。
對於這種可能具有破壞性的命令,可以新增“後悔藥”--dry-run,它只是列出將要操作的命令和受影響的檔案,而不是實際執行操作。實際上,以下兩個命令也很實用:
-P—progressive。--verbose:顯示詳細資訊。
4.3. 複製 copy
將源目錄中的檔案複製到目標目錄。與同步命令不同的是,複製命令不會刪除目標目錄中不存在於源目錄中的檔案。它只是單純地將源目錄中的檔案複製到目標目錄,如果目標目錄中已經存在相同的檔案,Rclone 會根據設定決定是否覆蓋目標檔案。
rclone copy source: destination: [options]
例如:
rclone copy remote_drive:source_folder local_folder --include "*.pdf"
這個命令將遠端驅動器中的source_folder資料夾下所有以.pdf結尾的檔案複製到本地資料夾local_folder中。
這裡需要說明一下同步和複製的區別。同步是保持兩個資料夾的內容一致,而複製只是簡單的複製。
4.4. 移動 move
rclone move source: destination: [options]
將源目錄中的檔案移動到目標目錄。這意味著源目錄中的檔案將被刪除,而目標目錄中會出現相同的檔案。如果目標目錄中已經存在相同的檔案,Rclone 會根據設定決定是否覆蓋目標檔案。
rclone move local_folder:remote_drive:archive_folder --exclude "*.log"
將本地資料夾local_folder中的檔案移動到遠端驅動器remote_drive下的archive_folder中,同時排除所有以.log結尾的檔案。
4.5. 刪除 delete
用於刪除某個具體的檔案,如果是地址:
rclone delete remote:path [options]
刪除遠端儲存中的檔案或目錄。這個命令需要謹慎使用,因為一旦刪除,檔案可能無法恢復。
例如:
rclone delete remote_drive:old_folder --dry-run
這個命令會模擬刪除遠端驅動器中的old_folder資料夾,但不會真正執行刪除操作,只是顯示如果執行刪除命令會發生什麼。
4.6. 清理 purge
rclone purge remote:path [options]
刪除遠端儲存中的指定路徑及其所有內容,包括子目錄和檔案。這個命令比delete命令更徹底,因為它會刪除整個目錄結構。
例如:
rclone purge remote_drive:old_data_folder
這個命令會刪除遠端驅動器中的old_data_folder資料夾及其所有內容。
4.7. 檢查檔案命令check
rclone check source: destination: [options]
比較源目錄和目標目錄中的檔案,以確定它們是否相同。如果檔案不同,Rclone 會報告差異。
例如:
rclone check local_folder:remote_drive:backup_folder
這個命令會檢查本地資料夾local_folder和遠端驅動器中backup_folder資料夾下的檔案是否相同。
4.8. 掛載命令mount
rclone mount source: mountpoint [options]
將遠端儲存掛載到本地檔案系統中,使得你可以像訪問本地磁碟一樣訪問遠端儲存。
例如:
rclone mount remote_drive: /mnt/remote_drive --vfs-cache-mode writes
這個命令將遠端驅動器掛載到本地檔案系統的/mnt/remote_drive目錄下,並設定虛擬檔案系統快取模式為writes,以提高寫入效能。
4.9 檢視 cat
就像檢視本地檔案一樣使用cat命令。
4.10. 小結
當然,這麼多的命令不可能一下都記住。沒關係,忘記的時候可以回來查詢。
5. filtering include exclude
主要適用於下列命令sync、move、ls、lsl、md5sum、sha1sum、size、delete、check等會改變檔案的命令。pruge命令不適用 filter。
有時候我們在進行 rclone 操作的時候需要對檔案進行一系列的篩選,這個時候就可以使用 filtering。
在進行 Rclone 操作時,常常需要對檔案進行篩選。這時就要用到 filter。filter 是一個比較全面的功能,實際中會退化為 include 或者 exclude。實際上,在 shell 的語法中,本身也有萬用字元的一些說明。需要避免同時使用 include、exclude 和 filter,因為 Rclone 在同時解析時,可能會出現未知問題。
Rclone 的匹配規則遵循 glob 風格:
* 匹配任何非分隔符(/)字符序列
** 匹配任何字符序列,包括/分隔符
? 匹配任何单个非分隔符(/)字符
[ [! ] { character-range } ]
字符类(必须非空)
{ pattern-list }
模式替代
{{ regexp }}
正则表达式匹配
c 匹配字符 c(c!= *, **,?, \, [, {, })
\c 匹配保留字符 c(c = *, **,?, \, [, {, })或字符类
character-range:
c 匹配字符 c(c!= \, -, ])
\c 匹配保留字符 c(c = \, -, ])
lo - hi 匹配字符 c,满足 lo <= c <= hi
pattern-list:
pattern {, pattern }
逗号分隔(无空格)的模式
總結
本文全面介紹了 Rclone 的各種使用方式。