
저는 원격 시스템의 매우 큰 파일에 묻혀 있는 일부 데이터를 가져오는 도구를 개발 중입니다. 전체 파일을 복사하는 것은 비실용적이며 필요한 모든 데이터는 파일의 처음 1000바이트 정도 내에 존재합니다. 가져오기를 시작하고 ^C를 사용하여 취소하여 부분 파일을 가져올 수 있다는 것을 알고 있지만 일관성을 유지하면서 자동화하는 것은 불가능하지는 않더라도 어렵습니다.
나는 내 FTP 클라이언트에게 원격 파일의 x 바이트만 가져오고 파일이 있으면 즉시 종료하라고 말하고 싶습니다. 부분 다운로드를 수행하는 몇 가지 Windows 클라이언트를 찾았지만 ftp 매뉴얼 페이지에서는 아무것도 찾지 못했고 온라인 문서도 드물었습니다.
이 HowTo를 찾았습니다.http://cdsarc.u-strasbg.fr/doc/ftp.htx이는 다음 구문을 제안합니다.
ftp> get bigfile.dat:0-5000 bigfile.nxt
이것이 클라이언트에서 구현되어야 하는지, 서버에서 구현되어야 하는지는 확실하지 않지만, 두 경우 모두 내 환경에서는 작동하지 않는 것 같습니다. (z/OS에서 실행되는 FTP 서버에 연결하는 표준 Linux FTP 클라이언트)
Linux 표준 FTP 클라이언트와 Windows의 Filezilla 서버 간에 시도하는 경우에도 다음과 같은 방식으로 시도가 실패합니다.
ftp> get green.gif:0-10c
local: green.gif:0-10c remote: green.gif:0-10c
227 Entering Passive Mode (9,42,91,226,4,105)
550 File not found
따라서 :0-10c는 파일 이름의 일부로 해석됩니다. 실패하다. 이견있는 사람?
답변1
컬을 사용하세요. 매뉴얼 페이지에서:
-r/--range <range>
(HTTP/FTP/FILE) Retrieve a byte range (i.e a partial document)
from a HTTP/1.1, FTP server or a local FILE. Ranges can be spec-
ified in a number of ways.
0-499 specifies the first 500 bytes
500-999 specifies the second 500 bytes
-500 specifies the last 500 bytes
9500- specifies the bytes from offset 9500 and forward
0-0,-1 specifies the first and last byte only(*)(H)
500-700,600-799
specifies 300 bytes from offset 500(H)
그러나 이 기능이 작동하려면 서버에서 SIZE 확장을 지원해야 합니다.
답변2
나는 당신이 이것을 위해 컬을 사용하고 싶다고 생각합니다
매뉴얼 페이지에서:
-r/--range <range>
(HTTP/FTP/FILE) Retrieve a byte range (i.e a partial document)
from a HTTP/1.1, FTP server or a local FILE. Ranges can be spec‐
ified in a number of ways.
0-499 specifies the first 500 bytes
500-999 specifies the second 500 bytes
-500 specifies the last 500 bytes
9500- specifies the bytes from offset 9500 and forward
답변3
이와 같은 계획은 서버 구현에 크게 의존합니다. 일부 서버는 다른 서버보다 훨씬 더 많은 기능을 지원합니다.
파일을 분할하는 방법을 조사하거나 요청한 범위를 보내는 사용자 정의 응용 프로그램을 고려해 보겠습니다.