wget, не получая полный список каталогов

Я искал высоко и низко и не смог найти решение своей проблемы. Я не уверен, является ли это надлежащим форумом, но я надеюсь, что кто-то здесь смог помогать.

Я использовал wget (FTP) для резервного копирования моего веб-сайта к моему локальному HD, с помощью зеркальной опции, без проблемы, до недавнего времени. Недавно, каталог, который содержит изображения, достиг предела, установленного услугой хостинга, поскольку, сколькими объекты могут быть в списке FTP. У меня нет доступа SSL к учетной записи.

Я могу запустить скрипт, на удаленном сервере, и получить полный каталог, перечисляющий (ls), в файле, и загрузить его на мою локальную машину.

Действительно ли возможно питаться, этот файл к wget и иметь его зеркально отражают те файлы к моему локальному диску, как это сделало до удара предела списка? Я хотел бы, чтобы wget прочитал сгенерированный список и проверку на измененные и добавленные файлы. Вот вопросы, на которые я не мог найти ответы:

1) Какова была бы надлежащая команда ls для генерации необходимой информации? В настоящее время я только получаю фактические имена файлов, но я уверен, что больше необходимо.

2) Будет wget с зеркальной опцией все еще работать с входным файлом, или это просто загрузит все файлы во входном файле, не проверяя на измененное состояние? Я не нашел абсолютно никакой информации об этой комбинации - только на одной или другом. Я не хочу тестировать и завершать получение полного резервного копирования каталога - трата пропускной способности и время для раскрытия всех тех данных.

1
задан 16 June 2015 в 16:41

1 ответ

Можно сделать это, единственная проблема получает вывод от ls, который является тем же на удаленном и на локальной машине. Мой ls имеет опцию - стиль времени = + % s, который показывает в прошлый измененный раз файла в секундах с эпохи, которая должна соответствовать на обеих машинах. Я предполагаю, что Вы только хотите сделать это для одного каталога, иначе find было бы более соответствующим, если у Вас есть та команда.

На удаленном делают ls в необходимом каталоге в файл:

cd ... # cd to the directory to list
ls -l --time-style=+%s . >/tmp/listfile

На локальной машине скопируйте удаленное /tmp/listfile к локальному /tmp/listfile, затем используйте awk, чтобы подавить первые 4 столбца вывода и отсортировать список размера файла, даты и имени файла. (Я предполагаю, что у Вас могли бы быть имена файлов с пробелами следовательно причудливый awk).

awk '{$1="";$2="";$3="";$4="";print}' </tmp/listfile | sort >/tmp/a

В зеркальном каталоге получают тот же список:

cd ... # cd to same directory we listed remotely
ls -l --time-style=+%s . | awk '{$1="";$2="";$3="";$4="";print}' | sort >/tmp/b

Сравните два отсортированных списка и отбросьте строки, которые являются тем же с коммуникацией. Отбросьте размер и столбцы даты (и случайно вкладка в начале строк в/tmp/b не в/tmp/a и 2 межстолбца пробелов) и отбросьте дублирующиеся имена файлов с uniq. (Вы не должны сортировать снова, поскольку дублирующиеся строки смежны).

comm -3 /tmp/a /tmp/b | awk '{$1="";$2="";print substr($0,3)}' | uniq >/tmp/c

Список в/tmp/c является всеми файлами, которые являются новыми, другого размера или метки времени, или были удалены. Передайте каждого wget для выборки (все еще в соответствующем каталоге).

while read file
do  rm -f "$file"
    wget -N --no-directories ..../"$file" # non recursive single file to .
done </tmp/c

Необходимо настроить зеркало wget, чтобы больше не выбрать этот каталог.

Если можно сделать find ... -printf '%9s %T+ %p\n', Вы могли использовать этот вид техники, запускающейся наверху зеркального каталога, чтобы эффективно сделать зеркальное отражение себя.

0
ответ дан 4 October 2019 в 03:15

Другие вопросы по тегам:

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