수천 개의 파일을 하나씩 다운로드하고 싶습니다. 각각의 평균 크기는 5-10Mb입니다. 각각에는 "name_{i}"라는 이름이 있습니다. 여기서 "i"는 카운터입니다. 가장 쉽고 좋은 방법은 무엇입니까?
인터넷 연결이 중단될 수 있으니 이 과정을 중단하고 나중에 계속 진행하고 싶습니다. 이러한 경우 다음에 스크립트를 실행하거나 어떤 일이 발생하면 마지막으로 다운로드한 파일을 가져와 필요한 경우 다시 다운로드해야 합니다.
답변1
나는 당신이 원하는 것을 달성하기 위해 작은 쉘 스크립트를 작성할 수 있다고 믿습니다. for 루프를 사용하여 파일을 반복하고, wget 또는 이와 유사한 것을 사용하여 현재 파일을 다운로드하고 중단 후 위치를 읽을 수 있는 파일에 씁니다.
예:
if [ -f $FILE ] count=$(cat file) for i in {$COUNT ..5} do wget https://foo.bar/name_$i echo "$i" > $FILE done else for i in {1..5} do wget https://foo.bar/name_$i echo "$i" > $FILE done fi
이것은 단지 기본적인 아이디어일 뿐이며, 약간의 버그가 있을 수 있지만 제 생각을 이해하실 것이라고 생각합니다.
답변2
BASE_URL='http://some.site.somewhere.com/some/path'
LASTFILE='./countfile'
last=1
[ -e "$LASTFILE" ] && last=$(cat "$LASTFILE")
for i in $(eval {$last..1000}) ; do
echo "$i" > "$LASTFILE"
wget -c "$BASE_URL/name_\{$i\}"
done
당신은 그렇게 말했어요 Each has a name of "name_{i}"
. 파일 이름에 {} 중괄호가 포함되어 있다는 의미인지는 잘 모르겠습니다. 그렇지 않은 경우 위 줄에서 및 를 제거하세요 \{
.\}
wget
파일 이름에 0으로 채워진 숫자가 있는 경우(예: 5 대신 0005) seq
대신 eval {$last..1000}
다음과 같이 사용할 수 있습니다.
for i in $(seq -w $last 1000); do
...
done
답변3
옵션을 lftp
살펴 보세요 :mirror
미러[OPTS][출처[대상]]
Mirror specified source directory to local target directory. If the target directory ends with a slash (except the root), the source base name is appended to target directory name. Source and/or target can be URLs pointing to directories.
바라보다http://lftp.yar.ru/lftp-man.html더 알아보기.
편집하다
매뉴얼에서:
lftp는 복잡한 FTP, HTTP 및 다른 호스트에 대한 기타 연결을 허용하는 파일 전송 프로그램입니다. 사이트가 지정되면 lftp는 해당 사이트에 연결하고, 그렇지 않으면 open 명령을 사용하여 연결을 설정해야 합니다.
lftp can handle several file access methods - FTP, FTPS, HTTP, HTTPS, HFTP, FISH, SFTP and file (HTTPS and FTPS are only available when lftp is compiled with GNU TLS or OpenSSL library).
lftp
HTTP를 통해 파일을 가져오는 데 사용할 수 있습니다. 노력하다:
lftp -e "mirror -c" http://url