파일의 일부만 다운로드

파일의 일부만 다운로드

axel또는 aria2사용 가능한 다른 도구를 통해 파일(모든 파일)의 일부를 다운로드할 수 있는지 알아보려고 합니다 .

예를 들어, 영화 파일이 있습니다(A/V 파일에서 이런 종류의 작업을 수행하는 것이 합리적이기 때문입니다). 파일 첫 번째 부분의 마지막 50MB 또는 세 번째 60MB만 다운로드하려면 어떻게 해야 합니까?

파일은 대부분 HTTP 서버에 있지만 FTP 서버에 있을 수도 있습니다. 다른 프로토콜을 통해 다운로드할 수 있다면 그것도 선택 사항입니다.

답변1

파일의 일부를 다운로드할 수 있는지 여부는 콘텐츠를 전송하는 데 사용되는 프로토콜에 따라 다릅니다.

HTTP/1.1을 통해 파일을 사용할 수 있는 경우 Range 헤더(RFC 2616의 섹션 14.35 참조)를 적절하게 지원하는 서버에서는 파일의 일부를 다운로드할 수 있습니다.

다음 파일을 고려하십시오.

$ cat testfile.txt
12345

nginx(Range 헤더를 지원하는 웹 서버)를 사용하여 이를 제공하는 경우 일부를 다운로드할 수 있습니다(가독성을 위해 줄 바꿈이 삽입됨).

$ 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

이는 중단된 전송을 "재개"하는 데 사용하는 컬, wget 및 기타 HTTP 클라이언트와 동일한 기능입니다.

FTP 프로토콜은 RESTART(REST) ​​명령을 통해 지정된 오프셋에서 파일 전송을 재개하는 기능을 제공합니다(RFC 959의 섹션 4.1.3 참조). FTP에서 제공하는 위와 동일한 testfile.txt를 사용하세요.

$ 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 바이트에서 시작할 수 있습니다.

답변2

curl가지다--range/ -r변화는 HTTP 및 FTP(심지어 SFTP까지) 프로토콜을 지원하도록 문서화되어 있습니다.

curl --range start-end ftp://example.com/file.ext --output test.ext

답변3

내가 찾은 간단한 방법은 다음을 사용하는 것입니다 head.

curl -s https://somedomain.com/file.txt | head -c 1000

그러면 파일의 첫 번째 킬로바이트가 완료됩니다.

내 사용 사례에서는 1GB의 파일 콘텐츠 압축을 풀고 싶기 때문에 다음과 같이 합니다.

curl -s https://somedomain.com/file.txt.bz2 | bzcat | head -c 1000 > 1kb-file.txt

정말 좋아해요!

관련 정보