ffl 和 croc、Magic Wormhole 這類 CLI 傳檔工具差在哪?
發表於 Thu 07 May 2026,分類於 Blog
如果你常在終端機裡傳檔,應該多少聽過 croc、Magic Wormhole、portal、sendme 這類工具。它們都解決同一個基本問題:把檔案從一台機器送到另一台機器。
主流傳檔方式大致可以分成兩大類:
-
P2P 傳輸工具
盡量讓兩端直接連線傳檔。如果直連失敗,有些工具會改走 relay。Magic Wormhole、portal、sendme 都屬於這個方向。croc則比較偏 relay-first,用 relay 來避開 NAT 和防火牆帶來的麻煩。 -
雲端上傳型工具
先把檔案上傳到伺服器,再給接收者下載連結。像 transfer.sh、WeTransfer、file.io 這類服務都屬於這個模式。
平常大家最常用的其實是第二類,例如 Google Drive、Dropbox、WeTransfer。原因很簡單:接收端不用裝東西,拿到連結就能下載。
CLI 傳檔工具通常有另一個優點:速度快、流程短、適合工程師、自動化和臨時傳輸。但它們也常有一個共同限制:接收端通常也要安裝同一個工具。
例如 croc 很好用,但兩邊都要有 croc。Magic Wormhole 也一樣,雙方都要進入同一套 wormhole 流程。這對自己的兩台機器之間傳檔很方便,但如果你要把檔案傳給客戶、同事、手機使用者,或者一群人,就容易卡住。
那麼 ffl 有什麼不同?
ffl 是「快檔連結 FastFileLink」的 CLI 版。它的核心想法很直接:在終端機裡把檔案、資料夾,甚至 stdin stream 變成一個可以直接打開的 HTTPS 下載連結。
ffl 的核心差異:接收端拿到的是 HTTPS 連結
ffl 的心智模型比較接近:
ffl file.zip
→ 產生一個 HTTPS link
→ 對方用 browser / curl / wget / ffl 下載
接收端不需要先安裝 ffl。如果他有瀏覽器,就能下載。如果他在 server 上,可以直接用 curl 或 wget。這一點讓整個傳輸模式變得很不同。
多數 CLI 傳檔工具比較像一次配對:
sender terminal <-> receiver terminal
ffl 則比較像建立一個可下載的交付入口:
sender creates HTTPS link
recipient A downloads
recipient B downloads
recipient C downloads later
這也是為什麼 ffl 天生適合一對多、多次下載、可續傳的情境。它不是只為「我的兩台電腦互傳」設計,也適合「我要把這份檔案交給別人」這種更接近交付的場景。
快速比較
✅ 支援 / 適合 ❌ 不支援 / 不適合 ➖ 視情況或不是主要模式
| 重點 | ffl | croc | Magic Wormhole | sendme | transfer.sh / WeTransfer |
|---|---|---|---|---|---|
| 接收端需要安裝工具 | ✅ 不需要,瀏覽器即可 | ❌ 需要 | ❌ 需要 | ❌ 需要 | ✅ 不需要 |
可用 curl / wget 下載 |
✅ 支援 | ❌ 不支援 | ❌ 不支援 | ❌ 不支援 | ✅ 支援 |
| 主要交付方式 | ✅ HTTPS 連結 | 🔑 口令配對 | 🔑 口令配對 | 🎫 ticket / CLI | ☁️ 雲端連結 |
| 一對多下載 | ✅ 很自然 | ❌ 不適合 | ❌ 不適合 | ❌ 不適合 | ✅ 支援 |
| 多次下載同一份檔案 | ✅ 支援 | ➖ 非主要模式 | ➖ 非主要模式 | ➖ 非主要模式 | ✅ 支援 |
| 直連 P2P | ✅ WebRTC P2P | ➖ 主要走 relay | ➖ 可嘗試直連 | ✅ 支援 | ❌ 不支援 |
| 直連失敗後 fallback | ✅ 自動切到 HTTPS relay / tunnel | ✅ relay | ✅ transit relay | ✅ relay | ➖ 原本就上傳到雲端 |
| relay 對速度的影響 | ✅ 直連時少一段中轉;失敗才 fallback | ➖ 常走 relay,速度受中轉位置影響 | ➖ 視連線路徑 | ✅ 直連時較佳 | ➖ 看雲端服務與地區 |
| E2EE | ✅ 支援 | ✅ 支援 | ✅ 支援 | ✅ 傳輸層加密 / protocol integrity | ➖ 視服務而定 |
| 收件者驗證模型 | ✅ OTP / PubKey / Basic Auth 等 | 🔑 口令本身是配對方式 | 🔑 wormhole code | 🎫 ticket | ➖ 主要靠 link 或帳號權限 |
| 上傳雲端 / 發送端可離線 | ✅ upload mode 支援 | ❌ 不支援 | ❌ 不支援 | ❌ 不支援 | ✅ 主要模式 |
| 中斷續傳 | ✅ 支援 | ✅ 支援 | ➖ 視情況 | ✅ 支援 | ➖ 視服務而定 |
| 傳資料夾 | ✅ 支援 | ✅ 支援 | ✅ 支援 | ✅ 支援 | ➖ 通常要先壓縮 |
| 分發方式 | ✅ APE 單檔 + native builds | ✅ Go 單檔,依平台下載 | ➖ Python package / OS package | ✅ Rust,依平台安裝 | ✅ Web service |
WebRTC 對速度和路徑有什麼影響?
ffl 預設會嘗試 WebRTC P2P。打得通時,資料直接從發送端流到接收端,中間不必繞過 relay。對大檔案來說,少一段中轉通常很有感。
如果 P2P 打不通,ffl 會自動 fallback 到 HTTPS relay / tunnel,下載仍然能繼續,不會因為 NAT 或防火牆卡住整個流程。接收端如果用瀏覽器或 curl,走的是 HTTPS 路徑;如果接收端也用 ffl,可以優先嘗試 WebRTC。
croc 的設計則比較偏 relay-first。這讓它很好穿透 NAT,但速度會比較依賴 relay 的位置、頻寬和路由。跨國、公司網路、雲端機房之間傳大檔時,這個差異會變得明顯。
sendme 這類工具也有現代 P2P 能力,技術上很強。不過接收端仍然需要使用對應工具或 ticket 流程,沒有 ffl 這種直接給標準 HTTPS 下載連結的接收體驗。
croc 這類工具強在哪?
croc 的優點很明確:兩台裝置都裝好後,用一組 code 配對,傳檔流程很順。對工程師來說,從自己的筆電傳到遠端主機、從公司電腦傳到家裡電腦,這類一對一場景很適合。
Magic Wormhole 也有類似優勢。它的 code phrase 很適合口頭傳遞,安全模型成熟,適合雙方都願意使用同一套 CLI 工具的情境。
這些工具最大的甜蜜點是:
兩邊都懂 CLI
兩邊都能安裝工具
一次傳完就結束
如果你的需求剛好是這樣,croc 和 Magic Wormhole 都很好。
ffl 更適合哪種情境?
ffl 的優勢出現在另一種場景:
我想傳檔給不懂 CLI 的人
我想讓對方直接用瀏覽器下載
我想把同一個連結給多個人
我希望下載中斷後可以續傳
我想用 curl / wget 放進自動化流程
我想同時保有 P2P 直連和 fallback 的可靠性
這些需求一出現,HTTPS link 的價值就變明顯。
你不需要確認對方有沒有裝工具,也不需要教對方輸入口令。你只要給他一個連結。對方使用瀏覽器、手機、server、CI job,都有自然的接收方式。
跟雲端上傳型工具差在哪?
transfer.sh、WeTransfer、file.io 這類服務也能產生下載連結。它們的流程通常是:
先上傳到伺服器
再讓對方下載
這很方便,但也代表檔案一定先經過服務端儲存。大檔案會先等上傳完成,隱私和保留期限也取決於服務提供者。
ffl 的策略更彈性。它可以先嘗試 WebRTC P2P 直連,直連不行再 fallback。需要讓發送端離線時,也可以使用 upload mode,讓它變成臨時下載連結。
這讓它同時覆蓋了兩種常見需求:
雙方都在線:優先 P2P 直連
雙方不同時在線:upload mode 臨時交付
如果再搭配 E2EE,relay 或暫存伺服器也無法讀取內容。
APE:為什麼單檔可攜很重要?
ffl 除了 native builds,也提供 APE 版本。APE 是 Actually Portable Executable 的縮寫,來自 Cosmopolitan 生態。簡單說,它是一種「單一可執行檔,盡量跨多個作業系統直接跑」的格式。
這跟一般 Go / Rust 工具也有差異。Go 或 Rust 常常可以編成單一 binary,但通常還是要依照平台下載不同版本:
linux-amd64
linux-arm64
macos-arm64
windows-amd64.exe
...
APE 的體驗比較像:
下載 ffl.com
放進 USB、家目錄、共享資料夾或工具包
需要時直接執行
對 DevOps、臨時救援、客戶環境、container、沒有安裝權限的機器很有用。你不一定要先安裝 package manager,也不用在目標機器上建一堆 runtime。
這也讓 ffl 的可嵌入能力比較特殊。官方 Android App 和 MCP Server 都是把 APE 版本當成核心 engine 使用。外層負責手機、AI agent 或服務端整合,底層仍然是同一個 ffl.com。
幾個很有感的 DevOps 場景
1. 從 container 裡把結果拉出來
你在 container 裡跑了一個任務,產生了報表、模型、log bundle 或測試 artifact。一般做法可能要掛 volume、開 SCP、設權限,或者先傳到雲端。
用 ffl 可以直接:
ffl /output/report.zip
它印出一個 HTTPS link,你在本機瀏覽器或另一台機器用 curl 下載即可。container 環境越臨時,這種方式越省事。
2. 把 MySQL 備份直接交給同事或另一台機器
備份資料庫時,不一定想先落地一個巨大 .sql 檔再上傳。你可以把 stream 直接交給 ffl:
mysqldump production_db | ffl - --name production_backup.sql
對方可以用瀏覽器下載,也可以在另一台機器用 ffl 或 curl 接。需要還原時也可以搭配 stdout 流水線處理。
3. CI job 產生大型 artifact,臨時分享給 reviewer
有些 build artifact 太大,不想塞進 GitHub Actions artifact、S3 或內部檔案服務。尤其是 debug build、benchmark result、模型權重、壓縮後的 log bundle。
在 CI 或臨時 build server 裡跑:
ffl build/output/
然後把 link 丟給 reviewer。對方用瀏覽器開,不需要知道 CI runner 裡發生什麼事。
4. 線上機器不能裝太多東西,但需要臨時傳檔
很多 production 或客戶環境不適合安裝額外套件,也不一定有 Python、Node、Go runtime。APE 單檔在這種時候很方便。
你可以把 ffl.com 放在內部工具目錄、USB、跳板機,或用一次性的方式抓下來。需要傳檔時執行,用完就刪掉。
5. 把檔案交給「不是工程師」的人
這點看似普通,其實很常見。你要把 log、影片、資料包、模型輸出、設計素材交給 PM、客戶、測試人員或外部廠商。
如果用 croc,對方也要裝 croc。如果用雲端硬碟,可能要先上傳、設權限、等同步。
ffl 給對方一個 HTTPS link。對方用瀏覽器下載。這就是它最直接的價值。
什麼時候選哪個?
如果你只是在兩台自己控制的機器之間傳檔,而且兩邊都能裝 CLI,croc、Magic Wormhole、sendme 都是成熟選擇。
如果你要傳給一般使用者、客戶、同事,或者希望一個連結可以被多人、多次下載,ffl 會更自然。
如果你只需要把檔案丟到雲端,等對方之後下載,transfer.sh、WeTransfer 這類工具也可以完成任務。只是這類工具通常沒有 P2P 直連,也比較不像一個可攜式 CLI delivery engine。
小結
ffl 的特色可以用一句話概括:
它把 CLI 傳檔做成 HTTPS link delivery。
這讓它和 croc、Magic Wormhole 這類一對一配對工具有明確區隔。接收端不必安裝工具,同一個連結可以給多人下載,也能用瀏覽器、curl、wget 或 ffl 接收。
加上 WebRTC P2P、fallback relay、E2EE、upload mode、APE 單檔可攜,ffl 更像是一個可以日常使用、也能放進自動化流程裡的檔案交付工具。
想看更完整的逐項比較,可以看 Wiki 裡的 詳細比較。
想試試看?可以到 FastFileLink CLI 下載。