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
정말 좋아해요!