Я знаю, что означает исходный вопрос, и ответ неwget -c...
Сценарий можно описать следующим образом:
# Start mirroring a site
wget -m http://...
# 400MB later wget died or interrupted,
# don't know where it left off, don't care,
# just want to get the remaining 100MB without getting the first 400MB again
wget -nc -r -l inf --no-remove-listing http://...
Опции «-r -l inf --no -remove -listing» эквивалентны -m без параметра -N. Добавление параметра -nc позволяет избежать сохранения первых 400 МБ на жестком диске.
Если вы сделаете много из них одновременно, вы быстро перегрузите свой локальный ящик, потому что вы запустите множество процессов одновременно.
Лучше сделать одно из следующего:
Если файлы имеют общий префикс, сделайте рекурсивную копию:
aws s3 cp --recursive s3://my-bucket/path/.
Творческое использование aws s3 cp --exclude
и --include
-, т. е. исключение всего, кроме того, что указано в списке включения.
aws s3 cp --recursive --exclude '*' \
--include 'path1/file1.txt' --include 'path2/file2.txt' \
s3://my-bucket/.
Используйте s3cmd --include-from file.txt
, который позволяет вам поместить требуемые имена файлов во входной файл.
~ $ cat include-filenames.txt
path1/file1.txt
path2/file2.txt
~ $ s3cmd get --recursive --exclude '*' \
--include-from include-filenames.txt \
s3://my-bucket/.
И нет, AWS не предоставляет никакого способа для мониторинга этого -, который работает на вашем локальном ноутбуке/сервере, вы должны отслеживать его там.
Надеюсь, это поможет:)
В конце я написал скрипт на python, чтобы гарантировать, что в любой момент времени будет происходить только 10 одновременных загрузок s3
#!/usr/bin/env python3
import os
import sys
import boto3
from multiprocessing import Pool
BUCKET = "my-bucket"
s3 = boto3.client("s3")
def download_s3_file(params):
""" If the files exists, assume download is already performed and done
"""
src, dest = params
if os.path.exists(dest) and os.path.isfile(dest):
print(f"The file {dest} is already downloaded ")
return
print("Downloading", BUCKET, src, dest)
print("process id:", os.getpid())
try:
s3.download_file(BUCKET, src, dest)
except Exception as e:
print(e)
def main():
filelist = sys.argv[1]
print("parent process:", os.getpid())
print("Working on ", filelist)
jobs = []
for l in open(filelist, "r"):
# Ignore commented lines
if not l.startswith("#"):
src, dest = l.strip().split(",")
jobs.append((src, dest,))
with Pool(10) as p:
p.map(download_s3_file, jobs)
if __name__ == "__main__":
main()