как возобновить загрузку в wget для данных Google Takeout

then=$( date -d '30 days ago' +%y%m%d )

for d in *; do
    if [[ -d "$d" ]] && [[ "$d" =~ ^([0-9][0-9])([0-9][0-9])([0-9][0-9])$ ]]; then
        datestring="${BASH_REMATCH[3]}${BASH_REMATCH[1]}${BASH_REMATCH[2]}"

        if [[ "$datestring" < "$then" ]]; then
            echo rm -rf "$d"
        fi
    fi
done

Этот скрипт bashсначала вычислит дату 30 дней назад с помощью GNU dateи сохранит ее в формате YYMMDDв $then.

Затем выполняется итерация по именам, найденным в текущем каталоге. Если какое-либо из найденных имен является каталогом, соответствующим заданному регулярному выражению, он выбирает части имени каталога и упорядочивает их в формате YYMMDDв $datestring.

Если $datestringлексикографически меньше, чем $then, то этот каталог следует удалить. echoпредотвращает это на самом деле, поэтому сначала запустите его несколько раз, чтобы убедиться, что он работает, прежде чем удалять его.

Тестирование:

$ mkdir {01..12}0117  # one directory for the 1st of every month this year
$ bash./script.sh
rm -rf 010117
rm -rf 020117
rm -rf 030117
rm -rf 040117
rm -rf 050117
rm -rf 060117
rm -rf 070117
rm -rf 080117

(сегодняшняя дата 170922, а $thenимеет значение170823)

Очевидно, что это не удастся для имен каталогов, содержащих даты прошлого века, (они не будут удалены ).

0
13.12.2019, 21:52
1 ответ

Обязательно правильно цитируйте свои аргументы. &имеет особое значение в командах оболочки (запускает команду в фоновом режиме, поэтому вы получаете [1] [2] [3]непреднамеренные фоновые задачи ), поэтому для URL-адресов, содержащих символ &, он должен быть заключен в кавычки, иначе он будет быть неправильно понятым.

$ wget http://some?special&url&parameters   # wrong
$ wget 'http://some?special&url&parameters' # correct

Что касается неправильного имени файла, wgetвозобновляется правильно, даже если имя файла URL и локальные имена файлов не совпадают, например:

$ wget -O customname -c http://speed.hetzner.de/100MB.bin
--2019-12-13 21:01:41--  http://speed.hetzner.de/100MB.bin
Resolving speed.hetzner.de (speed.hetzner.de)... 88.198.248.254, 2a01:4f8:0:59ed::2
Connecting to speed.hetzner.de (speed.hetzner.de)|88.198.248.254|:80... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 104857600 (100M), 54492347 (52M) remaining [application/octet-stream]
Saving to: ‘customname’

customname           67%[+++++++++===>       ]  67.20M  1.74MB/s    eta 20s

Таким образом, этот файл называется 100MB.binна веб-сервере, но сохраняется и возобновляется под customname, и он работает.

Однако возобновление в целом является концепцией, которая должна поддерживаться веб-сервером. Если веб-сервер отказывается отправлять частичный контент, возможно, у вас нет другого выбора, кроме как заново -загрузить все с нуля.

Также я не совсем понимаю, как работают серверы загрузки Google. Если он каждый раз генерирует новую ссылку, есть вероятность, что это может быть не один и тот же файл. Некоторые места предлагают загрузку в виде заархивированного архива, который создается «на лету», поэтому каждый раз он меняется, и попытка возобновить вместо этого приведет к повреждению загрузки.

Если у вас где-то есть арендованный виртуальный сервер, вы также можете сначала загрузить его оттуда, а затем перенести на нестабильное домашнее соединение.

1
28.01.2020, 03:00

Теги

Похожие вопросы