Files

只下載文件的一部分

  • March 9, 2021

我正在嘗試查找是否可以通過或任何其他可用工具下載文件的一部分(任何文件axelaria2

例如有一個電影文件(因為在 A/V 文件中做這種事情是有意義的)。我怎樣才能從文件的第一個下載最後 50MB 或第三個 60Mb?

這些文件主要在 HTTP 伺服器上;但可能在 FTP 伺服器上。如果可以通過其他協議下載它們,這也是一種選擇。

您是否可以下載文件的一部分取決於用於傳輸內容的協議。

如果文件可通過 HTTP/1.1 獲得,那麼任何正確支持 Range 標頭的伺服器(請參閱 RFC 2616 的第 14.35 節)都應該允許您下載文件的部分內容。

考慮以下文件:

$ cat testfile.txt
12345

如果我使用支持 Range 標頭的網路伺服器 nginx 來提供它,我可以下載它的一部分(插入換行符以提高可讀性):

$ curl --header "Range: bytes=2-3" https://localhost/testfile.txt -k
34
$ curl --header "Range: bytes=0-1" https://localhost/testfile.txt -k
12 
$ curl --header "Range: bytes=4-" https://localhost/testfile.txt -k
5

這與 curl、wget 和其他 HTTP 客戶端用於“恢復”中斷傳輸的功能相同。

FTP 協議通過 RESTART (REST) 命令提供在給定偏移量處恢復文件傳輸(參見 RFC 959 的第 4.1.3 節)。使用與上面相同的 testfile.txt,由 FTP 提供服務:

$ touch testfile.txt
$ ftp localhost
Connected to localhost.
220 (vsFTPd 2.2.2)
Name (localhost:steve): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> rest 3
restarting at 3. execute get, put or append to initiate transfer
ftp> get testfile.txt
local: testfile.txt remote: testfile.txt
200 PORT command successful. Consider using PASV.
350 Restart position accepted (3).
150 Opening BINARY mode data connection for testfile.txt (6 bytes).
226 Transfer complete.
3 bytes received in 0.00 secs (19.1 kB/s)
ftp> 221 Goodbye.
$ cat testfile.txt
45

我不熟悉許多 FTP 客戶端,所以我不知道是否有這樣做,但很可能通過使用 REST 命令讀取任何字節子集,然後在獲得所需字節數後簡單地停止.

它似乎能夠使用該標誌aria2恢復 HTTP 和 FTP 傳輸。-c這可能會使用上述功能,因為它僅支持 HTTP 和 FTP。但是,它似乎本身並不支持僅下載文件的末尾或中間部分。可以--continue通過在磁碟上創建一個虛擬文件來利用該標誌。如果這個文件有 N 個字節,也許 aria 會從文件的 N+1 個字節開始。

引用自:https://unix.stackexchange.com/questions/121314